用户代码上未解析的外部符号

时间:2014-07-24 15:05:28

标签: c linker msys

关于此链接错误有很多问题,但大部分都是关于未定义的方法或缺少lib文件。

我正在尝试使用Windows上的自定义模块编译nginx。我使用MSYS和nlink,我设置了所有环境等,所以nginx没有我的模块编译并运行正常。出于某种原因,我使用了xxHash算法,并且我希望在我的模块编译时从源实时编译它。所以我把xxHash文件夹的源代码放在解决方案的子文件夹中并放入#include "xxhash/xxhash.h"。当我从VS 2013构建独立测试应用程序时,它运行良好。但是,当我从nmake这样做时,我收到链接器错误

  

ngx_http_imagick_module.obj:错误LNK2019:未解析的外部   函数_RunJob ngx_modules.obj中引用的符号_XXH32:错误   LNK2001:未解析的外部符号_ngx_http_imagick_module   objs / nginx.exe:致命错误LNK1120:2个未解析的外部

我的问题:

如果方法XXH32从源代码构建而非静态链接,为什么方法#include完全调用外部?

是不是cl -c -O2 -W4 -nologo -MT -Zi -DFD_SETSIZE=1024 -I "C:/msys/1.0/home/tommi/imagick" -I src/core -I src/event -I src/event/modules -I src/os/win32 -I objs/lib/pcre -I objs/lib/zlib -I objs -I src/http -I src/http/modules -I src/mail -Foobjs/addon/ngx_http_imagick_module/ngx_http_imagick_module.obj ../ngx_http_imagick_module/ngx_http_imagick_module.c指令将文件中的物理文本放在指令所在的位置?如果是这样,链接器如何在某处搜索此符号?如果那么,编译器是否应该创建类似xxhash.obj的东西?因为我在编译器日志中看不到任何类似内容,但我看到#if defined (__cplusplus) extern "C" { #endif

我应该将xxHash单独编译为静态lib以使其工作吗?这不是什么大问题,但我更倾向于调查这个问题,以便以后不再面对它。

不确定这是否相关,但xxhash在其标题中有这个预处理器指令:

{{1}}

这可能是理由吗?如果是这样,如何解决它以及为什么/如何自动执行此操作?

0 个答案:

没有答案