簡體   English   中英

如何解決此VC ++ 6.0鏈接器錯誤?

[英]How to resolve this VC++ 6.0 linker error?

這是Windows控制台應用程序(實際上是一項服務),由前一個家伙4年前構建並安裝並運行。 我現在需要進行一些更改,但甚至無法生成當前版本! 這是構建輸出:

--------------------Configuration: MyApp - Win32 Debug--------------------
Compiling resources...
Compiling...
Main.cpp
winsock.cpp
Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Main.obj : error LNK2001: unresolved external symbol _socket_dontblock
Debug/MyApp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyApp.exe - 2 error(s), 1 warning(s)
--------------------------------------------------------------------------

如果我使用/NODEFAULTLIB則會出現很多錯誤。 該代碼實際上並沒有使用_socket_noblock但是我在'net上找不到任何內容。 大概是我鏈接到的某個庫使用的,但是我不知道它在哪個庫中。

---阿利斯泰爾。

LNK4098可能不是問題。 例如,如果您鏈​​接到某些使用靜態運行時鏈接的庫的發行版,則可能會發生這種情況,並導致LIBCMT(注意缺少“ D”后綴)被添加到默認庫中。 您在Debug config中構建的應用程序使用LIBCMT D ,因此發生沖突。 只要您不與該庫交換任何依賴於運行時的庫,它實際上可能是安全的。

至於_socket_noblock ,您可以使用一些搜索實用程序(例如grep或find)在.obj和.lib文件中搜索此字符串。 這樣,您將知道哪個庫引用了該符號,這可能是發現該庫具有哪些依賴項的起點。

您可以使用“ Dependency Walker” (一種免費工具)來查找應用程序的依賴關系,以了解您的應用程序如何鏈接到libcmtd。 編輯:您當然不能在無法鏈接的新版本上使用它(請參閱注釋),但是您可以在舊版本或新版本鏈接到的已知庫上使用它。

但是,由於真正的問題與我建議的內容無關,所以也許應該解決這個問題。

看起來您正在鏈接到CRT的不同版本-可能是因為您正在使用舊的內置庫以及新的CRT編譯器和版本。

抱歉,這是一個內部問題。 這是4年前特立獨行的編碼器和現在生銹的虛無(我!)的結合。

該代碼不使用_socket_noblock使用socket_noblock ,我只是需要鏈接到我們自己的圖書館之一。

defaultlib“ LIBCMTD”與其他庫的使用發生沖突是一種警告,表明您的程序使用的運行庫的版本與一個或多個庫的版本不同。 在程序和庫中使用相同的運行時,以消除警告。

(項目設置)(c ++選項卡)類別(代碼生成)(使用運行時庫)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM