我创建了一个使用winsocks的库,我使用以下命令编译它:
cl /c myLib.c /link ws2_32.lib
lib myLib.obj
因此获得myLib.lib,一切正常。
现在,我写了一个测试程序test.c,其中我做了:
#include "myLib.h"
//... i use some functions //
我用
编译它cl test.c /link myLib.lib
但我明白了:
myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _connec 吨@ 12 myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _htons @ 4 myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _inet_a DDR @ 4 myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _socket @ 12 myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _WSASta rtup @ 8 myLib.lib(myLib.obj):错误LNK2001:未解析的外部符号_ imp _WSACle 阿努普@ 0 logbus.lib(logbus.obj):错误LNK2001:未解析的外部符号_ imp _closes OCKET @ 4 test.exe:致命错误LNK1120:7个未解析的外部
修改: 好吧,如果我编译添加到ws2_32.lib的链接也可以。 无论如何我不喜欢它:我在创建我的时候已经链接了这个库,所以我只想链接到myLib.lib ...它可能吗?
答案 0 :(得分:1)
您可以尝试this answer中的建议,这基本上是将ws2_32.lib
包含在您自己的库中:
cl /c myLib.c /link ws2_32.lib
lib /out:myLib.lib myLib.obj ws2_32.lib
理论上这将构成一个复合库。但问题是,如果您分发myLib.lib
- 我不确定它会有多合法,因为您将包含受版权保护的代码。
顺便说一句,但我把它包括在内,因为它非常有趣并且略有相关性,Raymond Chen最近在Classical Linker Model上写了一系列文章。
答案 1 :(得分:1)
我解决了使用#pragma指令将win2_32包含到myLib.lib中。