2013-04-15 96 views
0

我創建了一個庫,利用winsocks的,我用下面的命令編譯:庫使用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):error LNK2001:無法解析的外部符號_ imp _connec t @ 12 MYLIB.LIB(myLib.obj):錯誤LNK 2001:解析外部符號_ imp的 _htons @ MYLIB.LIB(myLib.obj):錯誤LNK 2001:解析外部符號_ imp的 _inet_a DDR @ 4 MYLIB.LIB(myLib.obj):錯誤LNK 2001:解析外部符號_ imp的 _socket @ 12 MYLIB.LIB(myLib.obj):錯誤LNK 2001:解析外部符號_ 小鬼 _WSASta rtup @ 8 MYLIB .lib(myLib.obj):錯誤LNK2001:無法解析的外部符號_ imp _WSACle 阿努普@ 0 logbus.lib(logbus.obj):錯誤LNK 2001:解析外部符號_ 小鬼 _closes OCKET @ 4 TEST.EXE:致命錯誤LNK1120:7周無法解析的外部

編輯: 好的,如果我編譯添加一個鏈接到ws2_32.lib它也可以。 無論如何,我不喜歡它:當我創建我的時候,我已經鏈接了這個庫,所以我只想鏈接到myLib.lib ...它可能嗎?

回答

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

我使用#pragma指令解決了將win2_32包含到myLib.lib中的問題。