【发布时间】:2016-11-02 01:47:45
【问题描述】:
我正在尝试将我的项目与 libpng 版本 1.6.23 dll 库链接,但我的链接器仅将我对其进行的所有函数调用视为未解析的外部符号。我正在使用 Visual Studio Express 2013。这是链接器输出的 sn-p。
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_sig_bytes referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_sig_cmp referenced in function "private: static bool __cdecl PNGUtils::Validate(struct _iobuf *)" (?Validate@PNGUtils@@CA_NPEAU_iobuf@@@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_create_read_struct referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_longjmp_fn referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_create_info_struct referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_read_info referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
1>PNGUtils.obj : error LNK2019: unresolved external symbol png_set_expand_gray_1_2_4_to_8 referenced in function "public: static void * __cdecl PNGUtils::Read(char const *,unsigned int &,unsigned int &,int &)" (?Read@PNGUtils@@SAPEAXPEBDAEAI1AEAH@Z)
我正在与其他库(例如 lua 和 glew)成功链接,据我所知,在尝试链接到 libpng 时没有做任何不同的事情。
奇怪的是,当我将链接器置于详细模式时。它指出...
1> Finished searching libraries
1>
1> Unused libraries:
1> libs\png\libpng16.lib
链接器似乎声称我没有使用 libpng 库,即使我清楚地调用了它的函数,例如在我的代码段中的 PNGUtils.cpp 读取方法中。
png_structp pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!pngPtr)
{
LOG(LOG_CHANNEL_ERROR, "PNGUtils: Couldn't initialize png read struct");
fclose(fp);
return NULL;
}
png_infop infoPtr = png_create_info_struct(pngPtr);
if (!infoPtr)
{
LOG(LOG_CHANNEL_ERROR, "PNGUtils: Couldn't initialize png info struct");
png_destroy_read_struct(&pngPtr, (png_infopp)0, (png_infopp)0);
fclose(fp);
return NULL;
}
我对为什么链接器似乎忽略了对 libpng 的函数调用感到困惑。我很乐意听到任何想法或答案,当然也非常愿意应要求提供更多信息。
【问题讨论】:
-
我认为“未使用的库”部分意味着链接器在创建目标文件/可执行文件时忽略了该库。你必须找出原因。