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