程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言編程求助~!!!

C語言編程求助~!!!

編輯:C語言問答

C語言編程求助~!!!

350 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決??? 補充:Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Sort.obj : error LNK2001: unresolved external symbol ___security_cookie
Sort.obj : error LNK2001: unresolved external symbol __RTC_CheckEsp
Sort.obj : error LNK2001: unresolved external symbol @__security_check_cookie@4
Sort.obj : error LNK2001: unresolved external symbol @_RTC_CheckStackVars@8
Sort.obj : error LNK2001: unresolved external symbol __RTC_Shutdown
Sort.obj : error LNK2001: unresolved external symbol __RTC_InitBase
Debug/學生成績管理系統.exe : fatal error LNK1120: 6 unresolved externals
執行 link.exe 時出錯.
這個問題怎麼解決???

最佳回答:

以前經常遇到這個警告信息,因為運行並沒有什麼問題,所以也沒深究。但是耿耿於懷那個“ 0 個錯誤,0 個警告”的成功提示,在網上搜了一下。原來問題出在默認庫的引用選擇上。
VS2008,項目——屬性——配置屬性——C/C++——代碼生成:他有/MT,/MTd,/Md,/MDd四個選項,你必須讓所有使用的庫都使用相同的配置,否則就會有相應的提示,甚至可能會出現無法解析的函數。有時我們使用的庫不是自己可以控制的,那麼就只能把工程屬性設置成和你使用的庫相同的選項。
錯誤 1 error LNK2005: _free 已經在 libcmtd.lib(dbgheap.obj) 中定義 MSVCRT.lib
錯誤 2 error LNK2005: _malloc 已經在 libcmtd.lib(dbgheap.obj) 中定義 MSVCRT.lib
.....
如果有一堆的重定義錯誤發生在同一個lib中,而且跟它沖突的也是同一個lib,那麼這個兩個lib的功能應該是一樣的,可以2選一,只要在“忽略特定的庫”內填入需要忽略的庫。
項目屬性-配置屬性-鏈接器-輸入-忽略特定的庫:libcmtd.lib
項目屬性-配置屬性-常規-MFC的使用:在共享 DLL 中使用 MFC
MSVCRT.lib 和libcmt.lib的沖突還是比較常見的。
從錯誤信息可以看出是msvcrt.lib和libcmt.lib庫中重復定義了__isctype等符號。為什麼會出現這樣的問題呢?這就要從這兩個庫的作用說起了。
msvcrt.lib是VC中的Multithreaded DLL 版本的C運行時庫,而libcmt.lib是Multithreaded的運行時庫。在同一個項目中,所有的源文件必須鏈接相同的C運行時庫。如果某一文 件用了Multithreaded DLL版本,而其他文件用了Single-Threaded或者Multithreaded版本的庫,也就是說用了不同的庫,就會導致這個警告的出現。
告警信息的意思我們明白之後,就要找造成這個問題的原因了。在項目設置中我們可以看到當前項目使用的是Multithreaded非DLL版本的運 行時庫,這說明項目中還有其他文件用到了不是這個版本的運行時庫。很顯然,就是openssl的靜態庫。查看openssl中ms下的nt.mak,我們 可以發現靜態庫版本中openssl使用編譯開關/MD進行編譯的,也就是說openssl靜態庫是默認用的Multithreaded DLL 版本的C運行時庫。
原因找到了。那麼解決方法,很明顯有兩個。總之就是將兩個項目的運行時庫統一。
簡單的方式就是將項目的動態庫修改為使用Multithreaded DLL 版本的C運行時庫即可。
某些情況下你的項目可能不能改變當前的運行時庫,你可以將openssl的nt.mak中的/MD開關修改為/MT然後重新編譯openssl靜態庫就可以了。
默認庫“library”與其他庫的使用沖突;請使用 /NODEFAULTLIB:library LNK4098 的解決辦法
您試圖與不兼容的庫鏈接。
注意
運行時庫現在包含可防止混合不同類型的指令。如果試圖在同一個程序中使用不同類型的運行 時庫或使用調試和非調試版本的運行時庫,則將收到此警告。例如,如 果編譯一個文件以使用一種運行時庫,而編譯另一個文件以使用另一種運行時庫(例如單線程運行時庫對多線程運行時庫),並試圖鏈接它們,則將得到此警告。應 將所有源文件編譯為使用同一個運行時庫。有關更多信息,請參見使用運行時庫(/MD、/MT 和 /LD)編譯器選項。
可以 使用鏈接器的 /VERBOSE:LIB 開關來確定鏈接器搜索的庫。如果收到 LNK4098,並想創建使用如單線程、非調試運行時庫的可執行文件,請使用 /VERBOSE:LIB 選項確定鏈接器搜索的庫。鏈接器作為搜索的庫輸出的應是 LIBC.lib,而非 LIBCMT.lib、MSVCRT.lib、LIBCD.lib、LIBCMTD.lib 和 MSVCRTD.lib。對每個要忽略的庫可以使用 /NODEFAULTLIB,以通知鏈接器忽略錯誤的運行時庫。
下表顯示根據要使用的運行時庫應忽略的庫。
若要使用第一行運行時庫 請忽略第2行的這些庫
單線程 (libc.lib)
libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多線程 (libcmt.lib)
libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多線程 (msvcrt.lib)
libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
調試單線程 (libcd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
調試多線程 (libcmtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的調試多線程 (msvcrtd.lib)
libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
例如,如果收到此警告,並希望創建使用非調試、單線程版本的運行時庫的可執行文件,可以將下列選項與鏈接器一起使用:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
=================================================================

LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library

Linker Tools Warning LNK4098
defaultlib "library" conflicts with use of other libs; use /NODEFAULTLIB:library

You are trying to link with incompatible libraries.

Important The run-time libraries now contain directives to prevent mixing different types. You’ll receive this warning if you try to use different types or debug and non-debug versions of the run-time library in the same program. For example, if you compiled one file to use one kind of run-time library and another file to use another kind (for example, single-threaded versus multithreaded) and tried to link them, you’ll get this warning. You should compile all source files to use the same run-time library. See the Use Run-Time Library (MD, /ML, /MT, /LD) compiler options for more information.
You can use the linker’s /VERBOSE:LIB switch to determine which libraries the linker is searching. If you receive LNK4098 and want to create an executable file that uses, for example, the single-threaded, non-debug run-time libraries, use the /VERBOSE:LIB option to find out which libraries the linker is searching. The linker should print LIBC.LIB and not LIBCMT.LIB, MSVCRT.LIB, LIBCD.LIB, LIBCMTD.LIB, or MSVCRTD.LIB as the libraries searched. You can tell the linker to ignore the the incorrect run-time libraries by typing the incorrect libraries in the Ignore Libraries text box on the Link tab of the Settings dialog box in Developer’s Studio or by using the /NODEFAULTLIB:library option with LINK for each library you want to ignore. See the Ignore Libraries (/NODEFAULTLIB) linker option for more information.

The table below shows which libraries should be ignored depending on which run-time library you want to use.

To use this run-time library Ignore these libraries
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


For example, if you received this warning and you want to create an executable file that uses the non-debug, single-threaded version of the run-time libraries, you could use the following options with the linker:

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib

默認庫“library”與其他庫的使用沖突;使用 /NODEFAULTLIB:library

您試圖與不兼容的庫鏈接。

重要事項 運行時庫現在包含防止混合不同類型的指令。如果試圖在同一個程序中使用不同類型的運行時庫或使用調試和非調試版本的運行時庫,則將收到此警告。例如,如果編譯一個文件以使用一種運行時庫,而編譯另一個文件以使用另一種運行時庫(例如單線程運行時庫對多線程運行時庫),並試圖鏈接它們,則將得到此警告。應將所有源文件編譯為使用同一個運行時庫。有關更多信息,請參閱使用運行時庫(/MD、/ML、/MT、/LD)編譯器選項。
可以使用鏈接器的 /VERBOSE:LIB 開關來確定鏈接器搜索的庫。如果收到 LNK4098,並想創建使用如單線程、非調試運行時庫的可執行文件,請使用 /VERBOSE:LIB 選項確定鏈接器搜索的庫。鏈接器作為搜索的庫輸出的應是 LIBC.lib,而非 LIBCMT.lib、MSVCRT.lib、LIBCD.lib、LIBCMTD.lib 和 MSVCRTD.lib。對每個要忽略的庫可以使用 /NODEFAULTLIB,以通知鏈接器忽略錯誤的運行時庫。

下表顯示根據要使用的運行時庫應忽略的庫。

若要使用此運行時庫 請忽略這些庫
單線程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多線程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多線程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
調試單線程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
調試多線程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的調試多線程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
例如,如果收到此警告,並希望創建使用非調試、單線程版本的運行時庫的可執行文件,可以將下列選項與鏈接器一起使用:
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved