LLVM,-fprofile-instr-generate,未定义引用' __ llvm_profile_register_function

时间:2014-07-07 08:43:30

标签: llvm compiler-optimization instrumentation

我面临以下错误“-fprofile-instr-generate”。 感谢您的输入以解决此错误

谢谢,

错误:

clang++ -O2 -fprofile-instr-generate hello.cpp
/tmp/hello-58ef5f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-58ef5f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-58ef5f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-58ef5f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-58ef5f.o:hello.cpp:function __llvm_profile_runtime_user: error: undefined reference to '__llvm_profile_runtime'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Clang版本: clang版本3.5.0

操作系统: Ubuntu 14.04

LD版本: GNU gold(GNU Binutils 2.24.51.20140522)1.11

LLVM配置选项: configure --enable-profiling --enable-optimized --enable-shared --disable-debug-runtime --enable-targets = all --prefix = / install --with-的binutils-包括= / gold_linker / binutils的/包括

以上错误说'使用-v'。 -v的输出如下

 "/usr/local/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. -L/home/LLVM_install/bin/../lib -L/lib -L/usr/lib /tmp/hello-c8552f.o /home/LLVM_install/bin/../lib/clang/3.5.0/lib/linux/libclang_rt.profile-x86_64.a -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
/tmp/hello-c8552f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-c8552f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-c8552f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-c8552f.o:hello.cpp:function __llvm_profile_init: error: undefined reference to '__llvm_profile_register_function'
/tmp/hello-c8552f.o:hello.cpp:function __llvm_profile_runtime_user: error: undefined reference to '__llvm_profile_runtime'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2 个答案:

答案 0 :(得分:1)

如果使用cmake构建llvm和compiler-rt,则不会出现此问题。 但是,如果在构建llvm和compiler-rt时使用configure,则会出现此问题。

#Step-1) Build your LLVM compiler as follows
cd /home/user
git clone http://llvm.org/git/llvm.git
cd llvm/tools
git clone http://llvm.org/git/clang.git
cd ../../
mkdir build_folder
cd build_folder
cmake /home/user/llvm
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX=/home/user/llvm_install /home/user/llvm
make 
make install

#Step-2) Build compiler-rt as follows. Use llvm-config from your llvm installation from above step-1
git clone http://llvm.org/git/compiler-rt.git
mkdir comp_rt_build_dir
cd comp_rt_build_dir
cmake ../compiler-rt -DLLVM_CONFIG_PATH=/path/to/llvm-config
make 
make install

答案 1 :(得分:1)

我相信这是因为你需要在链接器阶段传递那个标志。引用the docs

  

如果与clang驱动程序链接,请将-fprofile-instr-generate传递给链接阶段,以确保链接所需的运行时库。

尝试-Wl,-fprofile-instr-generate

相关问题