終於解決了困擾我至少5個小時的鏈結錯誤

2021-08-22 06:50:18 字數 1207 閱讀 3943

今天就要拿出程式來,可偏偏就是編譯不過!

error lnk2001: unresolved external symbol ******************

我遇見這個錯誤當然不止一次了,想象中不難解決,我按照「定式」逐個確認:被引用的lib已經編譯,lib所在目錄已正確設定,lib已加入到「object/library modules」中,被引用的lib和當前工程使用的是相同的「use run-time library」設定(「multithreaded dll」)……

實在沒有辦法了,我一遍遍的「rebuild all」,一遍遍地檢查各項設定,我知道這樣很傻,可又能怎麼樣呢,我已經束手無策了啊,我只希望能碰到一次好運氣,讓它鏈結通過吧!

無論怎麼重複,結局是一樣的。

也上網搜尋了幾遍,出現同樣問題的倒是不少,但我並未從中找到解決我的問題的答案,哪怕是線索。

後來逐項核對vc專案配置,終於發現了癥結所在:在「ignore libraries」多填了「msvcrt.dll」!(link - category:input)

哦,原來如此,怪不得有那麼多c標準庫函式都被視為「unresolved external symbol」。

真應了那句老話(是老話嗎?不確認),看似非常複雜的問題,往往可以通過非常簡單的手段解決。我還要補上半句:找到簡單手段的過程也往往非常艱辛!

這又讓我想前了前幾天在linux下用gcc編譯時遇到的奇怪的問題:編譯鏈結均成功,但編譯出的so無法被載入,dlopen()失敗,dlerror()返回「找不到符號」之類的東東。它所找不到的符號明明是在某個靜態庫.a中,況且已經鏈結通過了呀。系統:ubuntu6.10,gcc:4.1.2。gcc命令列是:

gcc -shared -l. -i. x.a y.a z.a a.o b.o c.o -o my.so

最終的解決方案實際上這很簡單,就是把「-o my.so」往前放,把「x.a y.a z.a」往後放,即改為:

gcc -shared -o my.so -l. -i. a.o b.o c.ox.a y.a z.a

這個問題困擾了我好幾天,是在很偶然的機會下才找到了解決辦法。

回過去想一下,用第乙個命令列鏈結時,那些靜態庫.a並沒有被編譯進so中,用 nm 命令檢視也證實了這一點。

我對gcc以及linux下程式設計不太熟悉,不知道gcc的引數前後順序有沒有關係,不知道第一種寫法算正確呢,還是非法呢,還是gcc的bug?

寫出這一點,希望能給遇到類似問題的朋友一些啟發。

困擾我多次的記憶體溢位問題終於解決了

viewpager fragment 多圖 簡直要命,滑動到第10個fragment左右就會記憶體溢位 說是記憶體溢位,其實是記憶體洩漏。載入開源庫有很多,我用的是glide,glide會 釋放記憶體,然而如果該一直被imageview保持引用就會出現無法 的狀態,最終這些越來越多,導致記憶體溢位。...

乙個Refresh()指令解決了困擾了我2天的問題

用gdi 通過資料的 配置自動生成拓撲圖,由於對c gdi 開發缺少經驗,只能嘗試各種函式的實際效果和自己之前做vc 與vb一些經驗。之前主要問題是,設定了自動繪製控制項picturebox布局和自動按照控制項間位置生成連線。其中生成自動連線的函式,利用了參考來的例子,使用 graphics g t...

困擾許久的文泉驛顯示慢問題終於解決了

前言 很久沒寫了。5月忙著申請google summer of code,六月忙著申請實習,現在忙著實習,果然,blog只有閒著的時候才能寫 現在在北京千橡實習中,做atl wtl,一切都還算順利,要學的東西還有很多。另外雖然沒有能夠拿到google soc的資格,不過拿到了kde的 season ...