簡體   English   中英

編譯靜態庫時出現GCC鏈接器錯誤

[英]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 .solib X .a並鏈接找到的任何東西,但是大多數Linux安裝都沒有系統庫的靜態變體,因此沒有任何選擇。無論是。
  • 更糟糕的是, -Wl,-Bdynamic-Wl,-Bstatic 錯誤 -Wl,-Bstatic 禁止鏈接共享庫。 這具有選擇靜態libgcc的副作用,它隱式地出現在鏈接器命令行的最后。 而且您似乎沒有安裝該軟件。 大多數Linux系統沒有。
  • 每個對象必須在其引用的庫之前在命令行上列出。 我希望mylib.a包含需要opencv或opengl的函數,因此必須在那些-l標志之前列出它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM