在Ubuntu 16.04上编译OpenCV 3时出现链接错误:/usr/lib/x86_64-linux-gnu/libsoxr.so.0: undefined reference to `GOMP_parallel@GOMP_4.0'。

3

我尝试通过源代码构建的方式在Ubuntu 16.04上安装openCV 3.1和CUDA 8.0.44,以下是编译过程中遇到的错误信息:

Scanning dependencies of target opencv_test_video
[ 37%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_optflowpyrlk.cpp.o
[ 37%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_accum.cpp.o
[ 37%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_kalman.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_ecc.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_tvl1optflow.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_main.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_camshift.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/ocl/test_optflowpyrlk.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/ocl/test_optflow_farneback.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/ocl/test_bgfg_mog2.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/ocl/test_optflow_tvl1flow.cpp.o
[ 38%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_estimaterigid.cpp.o
[ 38%] Linking CXX executable ../../bin/opencv_test_video
//usr/lib/x86_64-linux-gnu/libsoxr.so.0: undefined reference to `GOMP_parallel@GOMP_4.0'
collect2: error: ld returned 1 exit status
modules/video/CMakeFiles/opencv_test_video.dir/build.make:391: recipe for target 'bin/opencv_test_video' failed
make[2]: *** [bin/opencv_test_video] Error 1
CMakeFiles/Makefile2:3336: recipe for target 'modules/video/CMakeFiles/opencv_test_video.dir/all' failed
make[1]: *** [modules/video/CMakeFiles/opencv_test_video.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

我认为这个问题与openMP或ld配置有关。
以下是详细配置:
  1. LD_LIBRARY_PATH:

/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib

  1. GCC版本:5.4.0

  2. CMake配置命令:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..

2个回答

18

首先,我认为这个问题是由于我安装了Anaconda并将其放入我的PATH中引起的。

Anaconda和系统默认使用不同的GCC版本。对于Ubuntu 16.04,GCC版本为5.4.0,但Anaconda仅提供GCC 4(我记不清是4.4还是4.8)。尽管我使用系统默认的gcc编译opencv,但它会找到位于Anaconda中的库,从而导致问题。

我认为有两种解决方法。

  1. 方法1:传递选项-D WITH_OPENMP=ON,或者在使用cmake-gui时,勾选选择WITH-OPENMP
  2. 方法2:从$PATHLD_LIBRARY_PATH中删除Anaconda。

这很有帮助。谢谢! - mahasamatman
1
这对我也起作用了,感谢您费心发布解决方案。请注意,在使用命令行时,-D WITH_OPENMP=ON是相应的选项,可以解决问题。 - oulenz
使用选项'-D WITH_OPENMP=ON'也对我有用。 我正在使用CUDA 9.1.85-1在Ubuntu 16.04(GCC 5.4.0)上尝试构建opencv 3.4,我的构建命令是cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX = /usr/local -D WITH_TBB = ON -D WITH_OPENMP = ON -D BUILD_NEW_PYTHON_SUPPORT = ON -D WITH_V4L = ON -D INSTALL_C_EXAMPLES = ON -D INSTALL_PYTHON_EXAMPLES = ON -D BUILD_EXAMPLES = ON -D WITH_QT = ON -D WITH_OPENGL = ON -D WITH_VTK = ON -D WITH_GTK = ON WITH_GTK_2_X = OFF -D WITH_CUBLAS = ON -D WITH_NVCUVID = ON -D WITH_LAPACK = ON -D OPENCV_EXTRA_MODULES_PATH = /my/opencv_contrib/modules/path .. - David Jung

0

我有一个类似的问题,但是与另一个库文件usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8有关:未定义对`uuid_generate@UUID_1.0' 的引用。 请查看我的问题。 我认为你也可能会收到警告,指出某些目录中的文件可能与隐式目录中的库冲突:

解决方法在我的情况下:我将/usr/lib/x86_64-linux-gnu添加到bashrc文件中的LD_LIBRARY_PATH并进行了源代码。然后,我将libuuid库文件移动到anaconda3/libuuid下的anaconda3/lib。对我来说不再有错误,我希望这也可以行得通。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接