tensorflow_cc 导致对 `omp_in_parallel@VERSION' 的未定义引用

问题描述 投票:0回答:1

我在 Arch linux 上安装了

tensorflow-opt-cuda
,但尝试链接为

g++ -fopenmp "CMakeFiles/intro-hello-world.dir/hello-world.cc.o" -o intro-hello-world /usr/lib/libtensorflow_cc.so /usr/lib/libtensorflow_framework.so /usr/lib/libgomp.so -lpthread

结果:

/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `omp_in_parallel@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `GOMP_barrier@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `omp_get_max_threads@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_framework.so: undefined reference to `kmp_set_blocktime@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `omp_get_num_threads@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `omp_get_thread_num@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_cc.so: undefined reference to `GOMP_parallel@VERSION'
/usr/bin/ld: /usr/lib/libtensorflow_framework.so: undefined reference to `omp_set_num_threads@VERSION'
collect2: error: ld returned 1 exit status

虽然我确实有(例如):

readelf --symbols --wide /usr/lib/libgomp.so | grep 'omp_get_num_threads'
    79: 0000000000017110    29 FUNC    GLOBAL DEFAULT   15 omp_get_num_threads@@OMP_1.0
   202: 00000000000241b0     9 FUNC    GLOBAL DEFAULT   15 omp_get_num_threads_@@OMP_1.0
   329: 0000000000017110    29 FUNC    LOCAL  DEFAULT   15 gomp_ialias_omp_get_num_threads
   734: 00000000000241b0     9 FUNC    GLOBAL DEFAULT   15 omp_get_num_threads_
   851: 0000000000017110    29 FUNC    GLOBAL DEFAULT   15 omp_get_num_threads

请注意

readelf --symbols --wide /usr/lib/libtensorflow_cc.so | grep 'omp_get_num_threads'
  1122: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND omp_get_num_threads@VERSION (42)

发生什么事了?这个链接应该还是不应该链接?如果不是那么该怪谁呢?

c++ linux tensorflow openmp linker-errors
1个回答
0
投票

链接过程中列出库的顺序有时很重要。尝试重新排序您正在链接的库。将依赖于 OpenMP 的库(例如 TensorFlow)放置在链接器命令中的 OpenMP 本身之后。

g++ -fopenmp "CMakeFiles/intro-hello-world.dir/hello-world.cc.o" -o intro-hello-world /usr/lib/libgomp.so -lpthread /usr/lib/libtensorflow_cc.so /usr/lib/libtensorflow_framework.so

确保 TensorFlow 本身是使用您尝试链接的相同版本的 OpenMP 构建的。如果 OpenMP 版本不匹配,可能会导致链接问题。

如果上述解决方案均不起作用,您可能需要考虑检查您在 Arch Linux 上安装的特定 TensorFlow 软件包。该包的依赖项或编译方式可能存在一些问题。

© www.soinside.com 2019 - 2024. All rights reserved.