我有一个静态库,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,所以它看到符号并且没问题.
但是,现在我有一个小的可执行文件,它依赖于libschroedinger-1.0.a.编译很好,但是当我运行链接器时
gcc -lschroedinger-1.0 -lorc-0.4 -o output input.o
Run Code Online (Sandbox Code Playgroud)
它会出现以下错误:
/usr/local/lib/libschroedinger-1.0.a(libschroedinger_1.0_la-schro.o):schro.c:(.text+0x21):
undefined reference to `orc_init'
Run Code Online (Sandbox Code Playgroud)
gcc对图书馆的顺序很敏感.当它正在编译liborc-0.4.a时,没有必要orc_init,所以它不包括在内.解决方案是将LDFLAGS命令放在命令的末尾:
gcc -o output input.o -lschroedinger-1.0 -lorc-0.4
Run Code Online (Sandbox Code Playgroud)