使用winsocks的库:未解析的外部符号

时间:2013-04-15 14:05:32

标签: visual-c++ static-libraries winsock

我创建了一个使用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 ...它可能吗?

2 个答案:

答案 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中。