輸入>附加依..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VS 編譯鏈接錯(cuò)誤集錦

發(fā)布時(shí)間:2020-07-02 13:00:22 來(lái)源:網(wǎng)絡(luò) 閱讀:962 作者:fengyuzaitu 欄目:系統(tǒng)運(yùn)維

1 場(chǎng)景

    在同一個(gè)解決方案中,testdemo主程序模塊會(huì)調(diào)用動(dòng)態(tài)鏈接庫(kù)zlib,因此在testdemo的項(xiàng)目中進(jìn)行如下的屬性設(shè)置:

鏈接器>輸入>附加依賴項(xiàng):zlib.lib

鏈接器>常規(guī)>附加庫(kù)目錄:..\outputs\release\lib

在重新生成解決方案的時(shí)候,會(huì)出現(xiàn)如下的錯(cuò)誤:無(wú)法打開輸入文件


步驟

    查看到已經(jīng)生成了zlib.lib文件,并且所有的環(huán)境配置正確,然后查看完整的編譯過(guò)程,發(fā)現(xiàn)編譯的次序不正確,首先編譯testdemo主程序,然后再編譯zlib模塊,當(dāng)然會(huì)出現(xiàn)問(wèn)題


解決

    點(diǎn)擊testdemo項(xiàng)目,鼠標(biāo)右鍵選擇項(xiàng)目依賴項(xiàng),選擇zlib,確保首先編譯zlib,最后編譯主程序

    

問(wèn)題2:fatalerror LNK1112: 模塊計(jì)算機(jī)類型“MIPS”與目標(biāo)計(jì)算機(jī)類型“THUMB”沖突

參考:http://www.jb51.net/softjc/83192.html

解決方案:請(qǐng)選擇與解決方案相同的編譯平臺(tái)。



問(wèn)題5:CXX0017: 錯(cuò)誤: 沒有找到符號(hào)test1d.dll  test2d.dll

解決方案:由于解決方案中有些模塊提供的是release版本的dll,所以無(wú)法將整個(gè)工程置于debug模式


,從debug調(diào)試出錯(cuò)的信息中最后的d代表的是debug調(diào)試版本的dll。所以

必須在解決方案配置中選擇release


問(wèn)題6:項(xiàng)目源碼非常多,如果修改一個(gè)文件代碼選擇重新生成解決方案大概需要花費(fèi)15分鐘的時(shí)間,


目前沒有測(cè)試過(guò)生成解決方案是否可以減少編譯和鏈接的時(shí)間?

解決方案:修改某個(gè)文件之后不需要重新生成解決方案,然后直接開始執(zhí)行調(diào)試,自動(dòng)將修改的文件重


新編譯。


問(wèn)題7:error LNK2001: 無(wú)法解析的外部符號(hào) "public: virtual class  CTest::TCodeEntry const * 

__thiscall CTest::CTestImpl::GetItemByCode(unsignedint)" (?GetItemByCode@CTest@CTestImpl 


@@UAEPBVTCodeEntry@2@I@Z)     testimpl.obj

解決方案:遇到這個(gè)問(wèn)題,表示在鏈接的過(guò)程中,沒有找到真正的實(shí)現(xiàn),通過(guò)半小時(shí)的查閱代碼發(fā)現(xiàn)如

下的問(wèn)題:

引用class A

在函數(shù)Func(A a)中進(jìn)行了調(diào)用,在實(shí)際的過(guò)程中,A被定義為了struct結(jié)構(gòu)體類,這個(gè)時(shí)候鏈接的過(guò)程

中,就沒有辦法找到class A,這一點(diǎn)應(yīng)該注意。

    在實(shí)際的過(guò)程中,務(wù)必注意真正的實(shí)現(xiàn)和聲明是否一致,這個(gè)非常重要。


問(wèn)題8:error C2259TestQuery::CtestQueryImpl :can not instantiate abstract calss

解決方案:首先了解虛基類作為接口,所有的純虛函數(shù)必須在子類中實(shí)現(xiàn),否則編譯出錯(cuò),然后查看當(dāng)

前的編譯錯(cuò)誤提示,說(shuō)明目前的虛基類無(wú)法實(shí)例化,說(shuō)明有純虛函數(shù)沒有實(shí)現(xiàn),通過(guò)半個(gè)小時(shí)的代碼查

閱,發(fā)現(xiàn)是子類的函數(shù)聲明和基類的函數(shù)聲明參數(shù)列表不一致,說(shuō)明在拷貝代碼的過(guò)程中出現(xiàn)錯(cuò)誤,或

者修改代碼,但是基類代碼沒有同步

1)查看繼承的基類到底有多少個(gè),這些基類的純虛接口是否已經(jīng)實(shí)現(xiàn)

2)查看派生類中是否有函數(shù)攜帶了=0的純虛接口

3)最好的方法是刪除以前的代碼,重新編寫一遍,語(yǔ)法的錯(cuò)誤,無(wú)法在VS中顯示。


問(wèn)題9:無(wú)法打開包括文件: “corecrt.h”: No such file or directory

VS2013下編譯jsoncpp正常,但是VS2015編譯出現(xiàn)上面的錯(cuò)誤,需要在包含路徑中添加如下:

 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt 


問(wèn)題10:runtime error! abnormal program termination

說(shuō)明:在安裝VS2015的環(huán)境下,正常運(yùn)行,在已有的環(huán)境,只是替換一下可執(zhí)行程序,出現(xiàn)如上的錯(cuò)誤,初步懷疑是某些動(dòng)態(tài)庫(kù)沒有更新,因此重新拷貝所有的動(dòng)態(tài)庫(kù),只是配置文件沒有改動(dòng),暫時(shí)沒有發(fā)現(xiàn)上面的問(wèn)題


問(wèn)題11:'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS

解決方式一:在調(diào)用函數(shù)的文件頭部,調(diào)用預(yù)編譯宏#pragma warning(disable:4996)

解決方式二:C/C++預(yù)編譯器中填寫_CRT_SECURE_NO_WARNINGS

可以采用strcpy_s函數(shù),VS提供的安全拷貝函數(shù),第二個(gè)參數(shù)指定了目標(biāo)緩沖區(qū)的大小,如果源緩沖區(qū)過(guò)大,將會(huì)進(jìn)行截取


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI