幾個問題及解決方法

2021-08-27 01:18:40 字數 3041 閱讀 8837

在編譯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.

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

於是, 我在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 使用國內映象源與埠 網上一搜一大把,我用的是...