问题
Trying to install openCV 3.1, CUDA 8.0.44 on Ubuntu 16.04 by building from the source.
The following are the errors I met during the compilation.
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
I consider the issue is related to the openMP or the ld configuration.
The following are the detailed configuration:
- LD_LIBRARY_PATH:
/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib
GCC version: 5.4.0
CMake configuration command:
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" ..
回答1:
Firstly, I thought this problem was caused because I installed Anaconda and put it into my PATH
.
Different GCC version are used between Anaconda and System default. For Ubuntu 16.04, the GCC version is 5.4.0 however Anaconda only provides GCC 4 (I can't remember it's 4.4 or 4.8). Although I used the system default gcc to compile opencv, it somehow will find the lib located in Anaconda, which caused the problem.
I think there are two ways to solve this issue.
- Method 1: Pass the option
-D WITH_OPENMP=ON
, or, when using cmake-gui, check the choiceWITH-OPENMP
. - Method 2: Delete Anaconda from your
$PATH
andLD_LIBRARY_PATH
.
来源:https://stackoverflow.com/questions/40322301/compile-opencv-3-on-ubuntu-16-04-linking-error-usr-lib-x86-64-linux-gnu-libsox