开发者

How can I get rid of the __imp__ prefix in the linker in VC++?

I'm using libcurl and am getting the following sort of linker errors in VC++ 10.

1>main.obj : error LNK2019: unresolved external symbol __imp__curl_easy_strerror referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> &g开发者_如何学Got; __cdecl curl_httpget(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?curl_httpget@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)

How can I get rid of that imp prefix in front of the function name? I am linking to the right lib, right path etc.


The __imp__ prefix appears whenever you are linking to a DLL. It does not appear when linking to statically linked libraries. Most likely the code is generated to be linked against a DLL import lib, but you have linked it with a static lib instead.

The prefix is added when you mark the imported function with __declspec(dllimport) - make sure your imports are not using this when not linking against a DLL.


You have to add CURL_STATICLIB to Preprocessor Definitions at the properties of your projects in MSVC


You are using a header file that defines the function prototype with the specifier evaluating to __declspec(dllimport)

You need to either redefine the statement that is evaluating to this (set it to nothing), or use a different header file altogether.

Typically you'll see code like this:

#ifdef FOO_EXPORTS
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif

...

DLLSPEC bool foo(int bar);

Compiling the project with FOO_EXPORTS defined will use one mode and without it will use the other.


If using wizard generated projects - check "Runtime settings" value in project properties -> C/C++ -> Code Generation section.

By default it usually has "Multithreaded DLL" value. You need Multithreaded /MT and Multithreaded Debug /MTd values.


As Suma mentioned, <your_library>.dll is normally accompanied by <your_library>.lib. Therefore if you get such error messages like

Error LNK2019 unresolved external symbol __imp__<your_symbol> referenced in function ...

it is highly recommended to check the Linker settings of your project.

In Visual Studio, just go for your project to

Properties -> Linker -> General

and check under entry Additional Library Directories, if the path to <your_library>.lib is defined there. If not, just add it.

Then check and define on

Properties -> Linker -> Input

under entry Additional Dependencies the probable missing <your_library>.lib.

The error message should disappear now.

Hope it helps?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜