我需要链接一些 Boost 的共享库 ( .so
) 文件。我已通过运行安装了 boost
sudo apt-get install libboost-all-dev
头文件和静态库已正确安装。共享库也已安装,但它们不包含任何符号。
$ nm /usr/lib/x86_64-linux-gnu/libboost_filesystem.so
nm: /usr/lib/x86_64-linux-gnu/libboost_filesystem.so: no symbols
这怎么可能?我该如何解决?我知道这是一个模糊的问题,但我尝试过apt-get clean
完全删除和清除所有 boost debian 软件包并重新安装,但总是得到相同的结果。从源代码编译 Boost 并安装单独的版本并不理想。
答案1
从 Ubuntu 存储库安装的大多数共享库都不包含符号。软件包通常使用调试符号构建,然后将其剥离并放入可单独安装的软件包中,以供gdb
其他调试器使用。
如果你想查看共享库中的符号动态符号表,它们是可以链接的公共符号,使用nm -D
而不是仅仅nm
。
答案2
我在其他库 (libcudart.so) 中也遇到了同样的问题。我使用静态“.a”库解决了这个问题。
我做了什么:
$ find /usr/local/cuda-7.0 -type f -name libcudart\*
directory/libcuda_static.a
$ compiler -Ldirectory -lcudart_static
我希望这可以帮助别人