0

我创建了一个使用 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 t@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 anup@0 logbus.lib(logbus.obj):错误 LNK2001:无法解析的外部符号_imp _closes ocket@4 test.exe:致命错误 LNK1120:7 个未解决的外部问题

编辑:好的,如果我编译添加到 ws2_32.lib 的链接也可以。无论如何我不喜欢它:我在创建我的库时已经链接了这个库,所以我只想链接到 myLib.lib ......这可能吗?

4

2 回答 2

1

我解决了使用#pragma 指令将win2_32 包含到myLib.lib 中的问题。

于 2013-04-17T08:14:13.230 回答
1

您可以尝试此答案中的建议,该建议基本上包含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的文章。

于 2013-04-15T15:00:18.610 回答