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 つの未解決の外部情報

編集: OK、ws2_32.lib へのリンクを追加してコンパイルすると、動作します。とにかく私はそれが好きではありません:私は自分のライブラリを作成したときにすでにこのライブラリをリンクしているので、myLib.libにリンクしたいだけです...それは可能ですか?

4

2 に答える 2

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 に答える