c++ - 无法将 PAPI 库与 opt llvm 链接

标签 c++ clang llvm papi

我正在做一个项目,我只需要使用 clang 生成位码,使用 opt 运行一些优化过程,然后创建一个可执行文件并测量其硬件计数器。

我可以直接使用 clang 链接:

clang -g -O0 -w -I/opt/apps/papi/5.3.0/include -Wl,-rpath,$PAPI_LIB -L$PAPI_LIB \
    -lpapi /scratch/02681/user/papi_helper.c prog.c -o a.out

但是现在我想在使用 clang 的前端并使用 opt 应用优化过程之后链接它。

我正在尝试以下方式:

clang -g -O0 -w -c -emit-llvm -I/opt/apps/papi/5.3.0/include -Wl,-rpath,$PAPI_LIB -L$PAPI_LIB \
    -lpapi /scratch/02681/user/papi_helper.c prog.c -o prog.o

llvm-link prog.o papi_helper.o -o prog-link.o

// run optimization passes
opt -licm prog-link.o -o prog-opt.o

llc -filetype=obj prog-opt.o -o prog-exec.o

clang prog-exec.o

完成上述过程后,出现以下错误:

undefined reference to `PAPI_event_code_to_name'

它无法解析 papi 函数。在此先感谢您的帮助。

最佳答案

显然,您需要将 -lpapi 添加到最后一次 clang 调用。否则链接器如何知道 libpapi?

关于c++ - 无法将 PAPI 库与 opt llvm 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585663/

相关文章:

x86 - LLVM/clang 是否有控制代码填充的标志?

function - 在 LLVM 函数中反向迭代基本 block

c++ - 为没有明显结束的容器实现迭代器是否有意义 - 例如树?

c++ - 配置文件模板生成makefile

c++ - 成员变量有外部链接吗?

c++ - 继承成员函数的模板特化

c++11 - 在 Clang 中设置为默认 C++11

gcc - 在 g++ (gcc) 或 clang (llvm) 中禁止内联汇编

c - 如何自托管 Clang?

llvm - 如何将 libstdc++ 与 clang++ 静态链接