2011-02-15 66 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