Difference between DLL and LIB


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 7 of 7

Thread: Difference between DLL and LIB

  1. #1
    nav Guest

    Difference between DLL and LIB


    Within visual studio, depending on project settings, I can generate a XXX.lib
    and a corresponding XXX.dll.

    What is the difference between a .lib and .dll? The major differences I understand
    are :

    DLL : as the name states is a dynamic link library, that can allows functions/
    classes/ implmented within XXX.dll to be called at run time. Hence the calling
    .exe or .dll links with XXX.dll at run time.

    LIB : is static linking. I.e when the calling exe or dll calls the XXX.lib
    the exporting functions/classes etc are pulled in at compile time, opposed
    to run time.

    Please can anybody enlighthen me!
    Thanks!

  2. #2
    Jim Guest

    Re: Difference between DLL and LIB


    "nav" <navpreet_bains@hotmail.com> wrote:
    >
    >Within visual studio, depending on project settings, I can generate a XXX.lib
    >and a corresponding XXX.dll.
    >
    >What is the difference between a .lib and .dll? The major differences I

    understand
    >are :
    >
    >DLL : as the name states is a dynamic link library, that can allows functions/
    >classes/ implmented within XXX.dll to be called at run time. Hence the calling
    >.exe or .dll links with XXX.dll at run time.
    >
    >LIB : is static linking. I.e when the calling exe or dll calls the XXX.lib
    >the exporting functions/classes etc are pulled in at compile time, opposed
    >to run time.
    >
    >Please can anybody enlighthen me!
    >Thanks!


    I have run across this in my position. I work on a team that builds DLLs
    and LIBs which are used by a fairly large team of developers. Your understanding
    of DLLs and LIBs is correct and I have only one addition. If, for the project,
    you specify that you wish to produce a LIB then you will end up with a LIB
    file. But, if you specify DLL you will end up with a DLL AND a LIB. In
    both instances the LIB file is statically linked in to the executable at
    build (compile) time. However, in the second instance (the DLL alternative)
    the LIB file simply contains a "stub" of which functions are to be included
    at runtime. Since the LIB file only references the functions and does not
    include the code the size of the LIB is very small.

    This explanation may not be 100% accurate. I am not an experienced C or
    C++ programmer but I felt I should respond since I asked a very similar question
    in my workplace and had a seasoned developer give me an answer.
    Hope it helps. Let me know if it doesn't, or I missed your question completely.

  3. #3
    Mario Galea Guest

    Re: Difference between DLL and LIB


    To the responses you've had so far, I can add a simple example
    of where you could use a DLL instead of a LIB:

    We have an application, say, 'OURAPP.EXE', which can communicate to a number
    of different serial devices.

    Based on our customers' field devices, we issue a different
    dynamic library, always named 'COMMS.DLL'.

    'OURAPP.EXE' always loads a file called 'COMMS.DLL' and
    always expects to find one function exposed:

    TalkSerial( const char *Command, int *Response, int Size ).

    It does not know or care about the differences at the "back-end"
    of each variant of 'COMMS.DLL'.

    This allows us to maintain a single 'flavour' of 'OURAPP.EXE' for
    all of our customers, regardless of their field devices.

    Regards,
    M. Galea
    Senior Systems Engineer - Automation
    Schneider Electric (Australia)


  4. #4
    Joey Edelstein Guest

    Re: Difference between DLL and LIB


    >If, for the project,
    >you specify that you wish to produce a LIB then you will end up with a LIB
    >file. But, if you specify DLL you will end up with a DLL AND a LIB.

    In
    >both instances the LIB file is statically linked in to the executable at
    >build (compile) time

    That is only one way to do it, it is known as Linking implicitly.
    You can also explicitly load a DLL's using calles to LoadLibrary() alowing
    you to sellect wich DLL to load at run time e.g. probmpt a user for a languadge
    and then load the correct DLL. Note that using LoadLibrary you will not
    be able to just call functions from the DLL but will need to use GetProcAddress
    to get a pointer to them and then call them. Also since DLL's are a win32
    issue you should note that MFC applications loading extension DLLs should
    use AfxLoadLibrary instead of LoadLibrary.
    Hope this helps
    Joey



  5. #5
    kumar Guest

    Re: Difference between DLL and LIB


    "Joey Edelstein" <joey@denx.com> wrote:
    >
    >>If, for the project,
    >>you specify that you wish to produce a LIB then you will end up with a

    LIB
    >>file. But, if you specify DLL you will end up with a DLL AND a LIB.


    >In
    >>both instances the LIB file is statically linked in to the executable at
    >>build (compile) time

    >That is only one way to do it, it is known as Linking implicitly.
    >You can also explicitly load a DLL's using calles to LoadLibrary() alowing
    >you to sellect wich DLL to load at run time e.g. probmpt a user for a languadge
    >and then load the correct DLL. Note that using LoadLibrary you will not
    >be able to just call functions from the DLL but will need to use GetProcAddress
    >to get a pointer to them and then call them. Also since DLL's are a win32
    >issue you should note that MFC applications loading extension DLLs should
    >use AfxLoadLibrary instead of LoadLibrary.
    > Hope this helps
    > Joey
    >
    >


    Kumar :

    Let me explain the differences between the LIB generated as a result of a
    DLL and Static Library.

    Static Library - Generates only LIB
    DLL - Generates a LIB and a DLL

    LIB generated from a Static Library has to be linked at build time and it
    is as good as having the object code in the DLL or EXE where you have linked
    the Static Library

    LIB generated from a DLL can be linked at build time and this LIB contains
    only the Proxy for the methods used and the actual DLL will have the Obj
    code which is used at run time.

    LIB generated from a DLL won't be useful for you if you load the DLL dynamically
    using LoadLibrary.

    Static Libraries are used for 2 reasons:
    1. Avoid versioning problems
    2. Distributing your module as a single entity ( DLL or EXE )

    Disadvantage is that ur module size is big.

    You can ask me if you have any problems regarding the LIB or DLL, I have
    worked for some time to solve the issues regarding these.

    One good reason why a LIB is generated when you need a DLL. Let us assume
    that you load the DLL using LoadLibrary. Now you have only one function to
    use i.e the GetProcAddress. But you need to get to the address of a Global
    object in the DLL which is not a Procedure. How do u do it?

    Open the LIB file generated in bin mode, copy the resolved string and pass
    this string as a parameter to GetProcAddress and typecast the address to
    the Object*

    Hope this helps.

    Thanks
    Kumar


  6. #6
    Jamie Nordmeyer Guest

    Re: Difference between DLL and LIB


    "Joey Edelstein" <joey@denx.com> wrote:
    >
    >>If, for the project,
    >>you specify that you wish to produce a LIB then you will end up with a

    LIB
    >>file. But, if you specify DLL you will end up with a DLL AND a LIB.


    >In
    >>both instances the LIB file is statically linked in to the executable at
    >>build (compile) time

    >That is only one way to do it, it is known as Linking implicitly.
    >You can also explicitly load a DLL's using calles to LoadLibrary() alowing
    >you to sellect wich DLL to load at run time e.g. probmpt a user for a languadge
    >and then load the correct DLL. Note that using LoadLibrary you will not
    >be able to just call functions from the DLL but will need to use GetProcAddress
    >to get a pointer to them and then call them. Also since DLL's are a win32
    >issue you should note that MFC applications loading extension DLLs should
    >use AfxLoadLibrary instead of LoadLibrary.
    > Hope this helps
    > Joey
    >
    >


    The cool thing about Dynamic Linking is that even though a .LIB is created
    when you compile your .DLL, you don't need to use it (you could technically
    delete it). Let's say that you have a .DLL named MyDLL.dll, and it contains
    a single function called ShowMessage that takes a LPCTSTR, and returns nothing
    (void). In you executable, you'd link to it like so:

    typedef void (CALLBACK *lpfShowMessage)(LPCTSTR message);//lpfShowMessage
    is a function pointer type.
    lpfShowMessage ShowMessage;//ShowMessage will point to the dll function.
    HINSTANCE hDll;//Handle to the dll

    hDll=LoadLibrary("MyDll.dll");
    if (!hDll)
    {
    MessageBox(NULL, "Some Error Message", "App Name", MB_ICONINFORMATION);
    PostQuitMessage(0);
    }
    ShowMessage=(lpfShowMessage)GetProcAddress(hDll, "ShowMessage");
    if (!ShowMessage)
    {
    FreeLibrary(hDll);
    MessageBox(NULL, "Some Error Message", "App Name", MB_ICONINFORMATION);
    PostQuitMessage(0);
    }

    //You may now call ShowMessage as if it were a function in your executable...
    ShowMessage("Hello World!");

    //When your program completes, call FreeLibrary to release the DLL.
    FreeLibrary(hDll);

  7. #7
    Vinit Guest

    Re: Difference between DLL and LIB


    The difference in simple words is that DLL contains the
    actual function while LIB file contains stub code to
    link to these function dynamically.

    You can attach DLL to your process using LIB
    file which will load the DLL when your
    process is loaded into the memory or
    you can directly load the DLL, when required,
    from your code by using calls like loadlibrary() and
    GetProcAddress()without using stub code
    provided by LIB file.




Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center