我需要一些C ++编译方面的帮助,因为我显然错过了一些东西。
我创建了.so库(让我们称之为mylib)取决于我编写的其他.so库(mylib2)和使用它的一些简单程序。第二个库也取决于ANTLR。我使用CMake来构建两个库,他们正在编译和安装就好了。但是当我尝试编译程序时:
cmd> g++ program.cpp -lmylib
我得到了
/usr/local/lib/libmylib2.so.0: undefined reference to `antlr::CharScanner::traceOut(char const*)'
ANTLR似乎是静态lib,所以我尝试了
cmd> g++ program.cpp -lmylib -Wl,-Bstatic -lantlr
但是我得到的只是
/usr/bin/ld: cannot find -lgcc_s
我在这里有两个问题:
1)为什么mylib2看不到antlr?我应该提一下,我使用自己的cmake find脚本,这可能是个问题吗?
find_package(ANTLR REQUIRED)
include_directories(${ANTLR_INCLUDE_DIR})
2)第二个错误是什么意思?为什么不能找到libgcc_s?
我真的很感激任何帮助。
修改
我应该提到我正在使用ANTLR 2.7
答案 0 :(得分:1)
来自man ld
(GNU ld):-Bstatic
- 不要链接共享库。您可以在命令行上多次使用此选项:它会影响库搜索后面的-l选项。因此,您应该在-lantlr
之后手动启用动态库。请记住,将未编译的静态库与-fPIC
选项链接可能会导致不可重定位的代码和更长的应用程序启动时间http://www.airs.com/blog/archives/41