對於c++生成的靜態庫,按照一般的想法去鏈結,會出現所有的符號都無法找到的錯誤。這裡所謂的一般的想法就是把原始檔放在最後邊,如:g++ -o test.exe -l"." -l"t" test.cpp,那麼得到的錯誤資訊為:
:test.cpp:(.text+0x31): undefined reference to `t::test::test()'
:test.cpp:(.text+0x3c): undefined reference to `t::test::print()'
百思不得其解,後來我baidu了一下,在http://hi.baidu.com/clzz/blog/item/7e4de5dddea7cfef77c6384b.html發現了解決方法,就是將所要鏈結的今天庫放到原始檔的後邊,也就是:g++test.cpp -o test.exe -l"." -l"t",這樣就能夠正確生成目標程式了。
***************
另外,關於動態庫的鏈結,使用g++編譯得到的dll檔案(windows平台下mingw,參考前面的文章),裡邊很多個class,如antlr2.7.7的cpp檔案們,使用生成的dll檔案時,回報高很多個info,都是說auto-import到某個地方去,如:info:resolving vtable for antlr::parserby linking to__imp___ztvn5antlr6parsere (auto-import),雖然沒有錯誤,但是有點煩人。而且使用vc的viewdependences來看,就有很多個同名的dll出現在依賴之中,而且每乙個前邊都有乙個箭頭符號,每乙個開啟看都只有乙個引用函式或者目標。還不知這是怎麼回事?
靜態庫使用另乙個靜態庫
1 近期除錯乙個模組原始碼編譯呼叫另乙個靜態庫 b.a 最後生成靜態庫 c.a 最後用最終生成的靜態庫 c.a 編譯出可執行檔案的時候,提示報錯了 在靜態庫 c.a 中,對 fun 未定義的引用,很鬱悶啊。2 但是整成動態庫,就不存在這個問題,為此檢查了幾遍cmakelist.txt檔案,還是沒能調...
另乙個自己
人們常說 人貴有自知之明 可是話說回來,又有幾人能真正的了解自己呢?我覺得我就是乙個很沒有自知之明的人。生於89年的我,到了今年的生日就28周歲了。都說三十而立,正所謂成家立業,可以回過頭發現自己可以稱得上 一無是處,一無所有 曾幾何時,還是鄰居家叔叔阿姨教育孩子的榜樣 曾幾何時父母因為自己考個好大...
OSG osg遇到的另乙個問題
在用自己的筆記本寫osg程式時,發現乙個鍵盤響應事件出現異常的問題。先來一段最簡單的例項 include include include include include include include intmain int argc,char ar 此前在win10上出現沒有響應的情況時,基本就是...