[英]GCC linker error while compiling a static library
我想為我的所有文件創建一個靜態庫,以便可以將mylib.a文件提供給其他人在他們的系統上執行。 我在代碼中使用opencv庫。 我使用以下命令來編譯我的代碼。
g++ index.cpp -o display1 -Wl,-Bdynamic pkg-config --cflags --libs opencv -lglut -lGL -lGLU -Wl,-Bstatic mylib.a
但是它給出了以下錯誤。
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
我相信Kerrek SB是正確的評論。 該命令應該是
g++ index.cpp -o display1 mylib.a $(pkg-config --cflags --libs opencv) -lglut -lGL -lGLU
說明:
-Wl,-Bdynamic
和-Wl,-Bstatic
標志是無用的。 鏈接器根據發現的內容自動選擇靜態或動態庫。 如果您給它提供了到庫的路徑(就像對mylib.a
所做的mylib.a
),它將無法選擇,並將鏈接您提供的庫。 如果給它一個-l
X標志,它將查找lib
X .so
或lib
X .a
並鏈接找到的任何東西,但是大多數Linux安裝都沒有系統庫的靜態變體,因此沒有任何選擇。無論是。 -Wl,-Bdynamic
和-Wl,-Bstatic
錯誤 。 -Wl,-Bstatic
禁止鏈接共享庫。 這具有選擇靜態libgcc的副作用,它隱式地出現在鏈接器命令行的最后。 而且您似乎沒有安裝該軟件。 大多數Linux系統沒有。 mylib.a
包含需要opencv或opengl的函數,因此必須在那些-l
標志之前列出它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.