幾個問題及解決方法

2021-05-22 18:24:48 字數 3142 閱讀 7375

在編譯vc 工程時出現的編譯錯誤

問題如下:

1、linking...

msvcrtd.lib(msvcrtd.dll) : error lnk2005: _fclose already defined in libcd.lib(fclose.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: _free already defined in libcd.lib(dbgheap.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: _malloc already defined in libcd.lib(dbgheap.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: _strncpy already defined in libcd.lib(strncpy.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: _sprintf already defined in libcd.lib(sprintf.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: __isctype already defined in libcd.lib(isctype.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: __close already defined in libcd.lib(close.obj)

msvcrtd.lib(msvcrtd.dll) : error lnk2005: __write already defined in libcd.lib(write.obj)

link : warning lnk4098: defaultlib "msvcrtd" conflicts with use of other libs; use /nodefaultlib:library

debug/module.exe : fatal error lnk1169: one or more multiply defined symbols found

error executing link.exe.

原因及解決方法如下:主程式的庫與libcd 庫鏈結方式不一致造成的。本例中libcd 是用動態鏈結的

所以可以設定:project->setting-> generation->use mfc in a shared dll

2、 於是, 我在vc6.0 整合環境中的選單項project 下的setting 中設定使用mfc 例"use mfc in a shared dll"

即:project->setting->general->microsoft foundation classed: 選擇use mfc in a shared dll"

同時,加入:

#include // 使用mfc

學會兩點:

(1) 、在project->setting->general->microsoft foundation classed: 選擇use mfc in a shared dll

(2 )、#include 順序調換可能會解決問題

3、windows.h和winsock2.h標頭檔案包含順序

大凡在windows 平台下用c++ 做網路開發很多時候都會同時包含這兩個標頭檔案,如若順序不當(windows.h 先於winsock2.h) 就會出現很多莫名其妙的錯誤。諸如:

警告4    warning c4005: 「af_ipx」: 巨集重定義c:/program files/microsoft sdks/windows/v6.0a/include/ws2def.h    91

警告5    warning c4005: 「af_max」: 巨集重定義c:/program files/microsoft sdks/windows/v6.0a/include/ws2def.h    127

警告6    warning c4005: 「so_dontlinger」: 巨集重定義c:/program files/microsoft sdks/windows/v6.0a/include/ws2def.h    163

只要將二者的包含順序調換一下問題就會解決,原因參見下面那個鏈結。另外,上述問題不僅影響直接包含二者的檔案,還影響 間接包含的情形。比如,a.h 包含了windows.h ,b.h 包含了winsock2.h ,如果在c.h 當中要引用a.h 和b.h ,那麼正確的順序應當 是b.h 先於a.h 。當然,實踐當中有時很難找到究竟是哪兩個檔案順序不對了,終極的解決辦法是,在當前工程(就是編譯不過的這個工程)所有include 語句最前面加上#include 和#include ,世界清靜了。

在包含了 以及 的工程中, 編譯有時會出現如

下錯誤:

error c2011: 'fd_set' : 'struct' type redefinition

error c2011: 'timeval' : 'struct' type redefinition

....

error c2375: 'accept' : redefinition; different linkage

[原因分析]

主要原因是因為 中包含了 標頭檔案, 由於其版

本的不同,導致出現上述的錯誤。 中相關**如下:

#ifndef win32_lean_and_mean

#include

#include

#include

........

#ifndef _mac

#include

#include

#endif

.......

#include

#endif

#endif

[解決方案]

由以上**可以看出如果在沒有定義win32_lean_and_mean 巨集的大前

提下windows.h 有可能包含winsock.h 標頭檔案,因此我們得出乙個很簡單

的解決方法就是在包含 之前定義win32_lean_and_mean 巨集, 如

下所示:#define win32_lean_and_mean

#include

幾個問題及解決方法

在編譯vc 工程時出現的編譯錯誤 問題如下 1 linking.msvcrtd.lib msvcrtd.dll error lnk2005 fclose already defined in libcd.lib fclose.obj msvcrtd.lib msvcrtd.dll error lnk...

SQL注入中基礎的幾個問題及解決方法

以 php 為例 引發 sql 注入失敗最主要的原因是什麼主要就是 waf 和手工保護 waf 用於攔截惡意 但是 waf 很好繞過,規則是死的,人是活的。waf 部署在伺服器端,根據預先定義的規則對 http 請求進行過濾,繼而攔截一些通用的必然 xss 和 sql 攻擊。order by 語句被...

安裝SDK 時遇到的幾個問題的解決方法

q1.開啟ardroid sdk manager時,packages只出現tools和extras兩個資料夾,且tools下只有ardroid sdk tools,log總跳出來 解決方法 第一步 tools options proxy settings 使用國內映象源與埠 網上一搜一大把,我用的是...