How do I link a DLL to my project? error LNK2019: unresolved external symbol

29,399

Solution 1

You should have received at least three files from the DLL owner. The DLL which you'll need at runtime, the .h file with the declarations of the exported functions, you already have that. And a .lib file, the import library for the DLL. Which the linker requires so it knows how to add the functions to the program's import table.

You are missing the step where you told the linker that it needs to link the .lib file. It needs to be added to the linker's Input + Additional Dependencies setting of your project. Or most easily done by writing the linker instruction in your source code:

#include "foo.h"
#pragma comment(lib, "foo.lib")

Which works for MSVC, not otherwise portable but linking never is. Copy the .lib file to your project directory or specify the full path.

Solution 2

I just had a similar problem. The solution turned out to be that the DLL was 64 bit, and the simple app using it was 32. I had forgotten to change it to x64 in the Configuration Manager.

Solution 3

  1. You need to specify in front of function definitions __declspec(dllexport) keyword at the time of building the dll
  2. You need to import or load the .dll file into process memory.
  3. You need to acquire the address of function you want to use from that dll.

Some useful links to get started:: MSDN Documentation, SO, Random

Share:
29,399
xcdemon05
Author by

xcdemon05

Updated on July 05, 2022

Comments

  • xcdemon05
    xcdemon05 almost 2 years

    I have a file foo.h that has various declarations for functions. All of these functions are implemented in a file foo.dll. However, when I include the .h file and try to use any of the functions, I get the error:

    bar.obj : error LNK2019: unresolved external symbol SomeFunction
    

    so obviously the function implementations aren't being found.

    What do I have to do to help the compiler find the definitions in the DLL and associate them with the .h file?

    I've seen some stuff about __declspec(dllexport) and __declspec(dllimport) but I still can't figure out how to use them.

  • Dan
    Dan about 9 years
    You just saved my day after three hours of searching the internet.
  • Nitay
    Nitay over 8 years
    Is there a difference between using #pragma comment and adding the lib file to Project Properties > Linker > Input?
  • user1703401
    user1703401 over 8 years
    There is no difference, you simply can't forget to change that setting.
  • user1910744
    user1910744 almost 6 years
    This is from more than three years ago, and I still make this exact same error every time. Bless your soul, DarenW.