在ubuntu 16.04上编译opencv 3链接错误:/usr/lib/x86_64-linux-gnu/libsoxr.so.0:未定义引用`GOMP_parallel@GOMP_4.0'

时间:2016-10-29 18:31:00

标签: compiler-errors ubuntu-16.04 opencv3.1

尝试通过从源代码构建在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:
  2. /usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib

    1. GCC版本:5.4.0

    2. CMake配置命令:

    3. 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 个答案:

答案 0 :(得分:17)

首先,我认为这个问题是因为我安装了Anaconda并将其放入我的PATH

Anaconda和System默认值之间使用不同的GCC版本。对于Ubuntu 16.04,GCC版本是5.4.0但是Anaconda只提供GCC 4(我不记得它是4.4或4.8)。虽然我使用系统默认的gcc来编译opencv,但它会以某种方式找到位于Anaconda的lib,这会导致问题。

我认为有两种方法可以解决这个问题。

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

答案 1 :(得分:0)

我有一个类似的问题,但是有另一个库文件usr / lib / x86_64-linux-gnu / libgdcmMSFF.so.2.8:未定义对`uuid_generate@UUID_1.0'的引用 在这里寻找我的issue。 我认为您可能还会收到警告,某些目录中的文件可能与隐式目录中的库冲突:

解决方案:我在bashrc文件的LD_LIBRARY_PATH中添加了/ usr / lib / x86_64-linux-gnu并将其作为源。然后,我将anaconda3 / lib下的libuuid库文件移至anaconda3 / libuuid。我没有更多的错误了,我希望这也可以解决。