2011-02-15 91 views
1

也找不到靜態庫符號我有一個靜態庫liborc-0.4.a,沒有共享庫。我有另一個庫libschroedinger-1.0.a(不共享),它依賴於liborc-0.4.a中的符號。如果我在liborc-0.4.a上運行nm,orc_init等符號顯示爲T(表示它們已定義)。我使用命令行標記-lorc-0.4構建了libschroedinger-1.0.a,以便它看到符號並且沒問題。即使使用-l

但是,現在我有一個小的可執行文件,依賴於libschroedinger-1.0.a。它編譯罰款,但是當我運行鏈接

gcc -lschroedinger-1.0 -lorc-0.4 -o output input.o 

它給錯誤,如:

/usr/local/lib/libschroedinger-1.0.a(libschroedinger_1.0_la-schro.o):schro.c:(.text+0x21): 
undefined reference to `orc_init' 

回答

8

gcc是庫的順序是敏感的。當它編譯liborc-0.4.a時,不需要orc_init,所以不包含它。解決的辦法是把LDFLAGS在命令的末尾:

gcc -o output input.o -lschroedinger-1.0 -lorc-0.4 
+0

唯一的要求是所有的庫都在編譯器行中列出了它們自己的依賴關係。所以,如果liba依賴於libb,你可以編寫gcc ... -la -lb。如果存在循環依賴關係,則包含兩次相同的庫。 – 2011-02-15 22:52:03

0

你最有可能編譯libschroedinger共享liborc。靜態庫與歸檔中的一組對象文件相同,因此它們不需要看到多於標題。請像下面這樣寫下來(與liborc相同的蘋果)。

gcc /path/to/libschroedinger-1.0.a /path/to/liborc-0.4.a -o output input.o