[英]g++ static library depends on dynamic libraries
我有一些靜態庫。 例如libpuchuu.a,它取決於動態庫。 例如libSDL.so(但是當然我有libSDL.a)libpuchuu.a的創建很簡單:
ar -rcs object_file_1.o object_file_2.o
但是我無法將我的項目與libpuchuu.a鏈接! 未定義的引用攻擊了我的控制台!
在某個論壇上,我發現了這樣的句子:如果您的對象文件依賴於ya,則必須將靜態庫的所有依賴項都存儲在該庫中,您必須將對象文件解壓縮到文件夾中,然后將所有對象打包到新庫中。 問題:
PS
我做了一個簡單的例子,並將其發布到pastebin:
http://paste.lisp.org/display/115456
構建命令:
g++ -O3 -c index.cpp -I/usr/local/include/SDL
g++ -O3 -c lib.cpp -I/usr/local/include/SDL
ar rv libpuchuu.a lib.o
g++ -O3 -o program.exe index.o -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows -lSDL_image -L. -lpuchuu
...來自index.cpp的未定義引用!
您是否嘗試過將-lSDL
添加到鏈接器的命令行中?
未定義的引用是您要嘗試在lib.cpp
中定義的lib.cpp
,您可以使用ar
將這些符號打包到libpuchuu.a
。 不幸的是,您沒有定義您認為正在定義的符號。 using namespace sdl;
不會自動導致您定義的所有內容都在sdl
名稱空間中。 它所做的只是安排它,以便當編譯器查找特定名稱時,它將在sdl
名稱空間以及主名稱空間中查找它。
您需要使用namespace sdl { .... functions ... }
來包裝lib.cpp
定義的namespace sdl { .... functions ... }
,您的代碼將可以很好地鏈接。
以我的經驗,當我對一個陌生的東西犯錯時,錯誤通常是一個愚蠢的錯誤,與我不熟悉的事物無關。 但是因為我在未知地區工作,所以我會自動認為我對該地區的了解不足一定是過錯的,而不是我做過一些愚蠢的事情。
您可能會發現我的經驗適用。
而且,作為一個旁注,“未定義引用攻擊您的控制台”的想法非常有趣,並且在嘗試鏈接后,屏幕和鍵盤的圖像留給了我,這是煙熏的廢墟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.