2017-01-30 75 views
2

我知道怎么看哪些库有一定分量correponds使用命令:我在哪里可以看到库包含LLVM的哪些部分?

llvm-config --libs core 

现在,假设我得到一个链接错误,并希望包括另一个库来解决它。

说,链接器无法解析某个符号A。那么我如何:

1)找到包含特定符号的库,例如, LLVMCore.lib。

2)查找库的内容以查看它定义的符号?

我不明白如何阅读文档。

回答

2

正如你已经发现了一个适当的LLVM-办法做到这一点会被指示组件使用llvm-config你打算链接或使用,例如

llvm-config --cxxflags --ldflags --system-libs --libs core 

其他常见非LLVM具体,你可以用它来找到一个符号的方法:在一个双赢的平台(使用VS自带工具在cmd或同等环境设置一个):

for %f in (*.lib) do (dumpbin.exe /symbols %f | findstr /C:"your_symbol") 

,如果你无法处理findstr的限制GNU grep可能是更好的选择。 如果您安装的Unix工具,并在您PATH你也可以使用

for %f in (*.lib) do (nm -gC %f | findstr /C:"your_symbol") 

baddger964建议。

在UNIX系统:

for lib in $(find . -name \*.so) ; do nm -gC $lib | grep my_symbol | grep -v " U " ; done 

(搜索该目录中*.somy_symbol;的extern-只,还原函数和排除未定义的符号)

鉴于上述问题2是微不足道的。

+0

感谢您的回答。你还可以提供用于在Linux上查找符号的'grep'命令吗?这是LLVM程序员通常解析其符号的方式,即找到包含它的库? – Shuzheng

+0

@Shuzheng编辑并添加更多信息 –

+0

谢谢你的回答。它是完整的和令人满意的:-) 最后一个问题,你知道任何“组件”被定义的资源吗?现在,我使用'llvm-config'来查看一个组件与哪个库相关。然而,如果有一些资源说:“LLVM源代码的这些部分被放到这个库中”和“这个组件包含对应于这些源的这些部分的库”,那将是很好的。这样,如果我看到'someheader.hpp'中定义了一个符号,我可以立即找到相应的库。 – Shuzheng

1

的一种方式,看看你的lib的符号是使用nm命令:

nm -gC mylib.so 
相关问题