我在哪里可以看到库包含 LLVM 的哪些部分?

Where do I see what parts of LLVM a library contain?

我知道如何通过命令查看某个组件对应于哪些库:

llvm-config --libs core

现在,假设我遇到了一个链接器错误,并且想包含另一个库来解决它。

比如说,链接器无法解析某些符号 A。那我怎么办:

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

2) 查找库的内容,看看它定义了什么符号?

我不明白如何阅读文档。

查看库符号的一种方法是使用 nm 命令:

nm -gC mylib.so

因为您已经发现了一个合适的 LLVM-way 来执行此操作,将使用 llvm-config 通过指示您打算 link 的 组件 反对或使用,例如

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

其他常用的non-llvm找符号的具体方法:在Win平台上(使用VS原生工具cmd或等效environment-set之一):

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")

所建议。

在 unix 系统上:

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

(在此目录中的 *.so 库中搜索 my_symbol;extern-only,分解并排除未定义的符号)

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