Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ linux编译-冲突库_C++_Linux_Opencv - Fatal编程技术网

C++ linux编译-冲突库

C++ linux编译-冲突库,c++,linux,opencv,C++,Linux,Opencv,所以我不是在电脑上工作,而是在运行ubuntu的嵌入式设备上工作 我正试图编译openCV代码,但我感觉自己陷入了僵局 这是我得到的错误: 问题: 重命名2.4库: ubuntu@tegra-ubuntu:/usr/lib$ sudo mv libopencv_core.so libopencv_core.soMyOld ubuntu@tegra-ubuntu:/usr/lib$ sudo mv libopencv_core.so.2.4 libopencv_core.so.2.4MyOld u

所以我不是在电脑上工作,而是在运行ubuntu的嵌入式设备上工作

我正试图编译openCV代码,但我感觉自己陷入了僵局

这是我得到的错误: 问题:

重命名2.4库:

ubuntu@tegra-ubuntu:/usr/lib$ sudo mv libopencv_core.so libopencv_core.soMyOld
ubuntu@tegra-ubuntu:/usr/lib$ sudo mv libopencv_core.so.2.4 libopencv_core.so.2.4MyOld
ubuntu@tegra-ubuntu:/usr/lib$ sudo mv libopencv_core.so.2.4.10 libopencv_core.so.2.4.10MyOld
重新编译代码

/usr/bin/ld: warning: libopencv_core.so.2.4, needed by /usr/lib/gcc/arm-linux-gnueabihf/4.8/../../../../lib/libopencv_imgproc.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by //usr/local/lib/libopencv_imgcodecs.so, may conflict with libopencv_imgproc.so.2.4
/usr/bin/ld: /tmp/ccmcvWug.o: undefined reference to symbol '_ZN2cv6circleERKNS_17_InputOutputArrayENS_6Point_IiEEiRKNS_7Scalar_IdEEiii'
/usr/local/lib//libopencv_imgproc.so.3.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
重命名3.2库:

ubuntu@tegra-ubuntu:/usr/local/lib$ sudo mv libopencv_core.so 
ubuntu@tegra-ubuntu:/usr/local/lib$ sudo mv libopencv_core.so.3.2 libopencv_core.so.3.2MyOld
ubuntu@tegra-ubuntu:/usr/local/lib$ sudo mv libopencv_core.so.3.2.0 libopencv_core.so.3.2.0MyOld
重新编译

/usr/bin/ld: warning: libopencv_core.so.3.2, needed by //usr/local/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by //usr/local/lib/libopencv_imgcodecs.so, may conflict with libopencv_imgproc.so.2.4
/usr/bin/ld: /tmp/cclHSHtB.o: undefined reference to symbol '_ZN2cv6circleERKNS_17_InputOutputArrayENS_6Point_IiEEiRKNS_7Scalar_IdEEiii'
/usr/local/lib//libopencv_imgproc.so.3.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我能做些什么来解决这个问题?卸载所有内容并重新安装不是一个选项

编辑:

我使用以下命令编译:

g++ src/personDetection.cpp src/personRecognition.cpp main.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_calib3d -lopencv_features2d -lopencv_video -lopencv_videoio -pthread -o main

-L
选项用于指定目录路径。编译器将使用其他系统标准目录搜索此目录,例如
LIBRARY\u PATH
中的目录但它首先搜索用-L指定的目录

-l
选项用于指定库的名称

在您的例子中,2.4版本库位于
/usr/lib
中,3.2版本库位于
/usr/local/lib
中。您的代码可能需要2.4版本,但您的系统可能会在搜索
/usr/local/lib
之前设置为搜索
/usr/lib
,这可能是您出现问题的原因

通过指定
-L/usr/lib
,您告诉编译器首先搜索
/usr/lib
,从而使用2.4版本库


更新

$ gcc -m64 -Xlinker --verbose  2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g'  | grep -vE '^$'
上面的命令将显示链接时默认搜索目录的列表。(从中复制了命令)


在我的机器(Ubuntu 16.04,64位)中,
/usr/local/lib
出现在
/usr/lib
之前。这意味着
/usr/local/lib
中的库可以覆盖
/usr/lib
中的库。()

-L
选项用于指定目录路径。编译器将使用其他系统标准目录搜索此目录,例如
LIBRARY\u PATH
中的目录但它首先搜索用-L指定的目录

-l
选项用于指定库的名称

在您的例子中,2.4版本库位于
/usr/lib
中,3.2版本库位于
/usr/local/lib
中。您的代码可能需要2.4版本,但您的系统可能会在搜索
/usr/local/lib
之前设置为搜索
/usr/lib
,这可能是您出现问题的原因

通过指定
-L/usr/lib
,您告诉编译器首先搜索
/usr/lib
,从而使用2.4版本库


更新

$ gcc -m64 -Xlinker --verbose  2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g'  | grep -vE '^$'
上面的命令将显示链接时默认搜索目录的列表。(从中复制了命令)


在我的机器(Ubuntu 16.04,64位)中,
/usr/local/lib
出现在
/usr/lib
之前。这意味着
/usr/local/lib
中的库可以覆盖
/usr/lib
中的库。()

我猜你是在tegra板上。也许您应该删除默认安装的OpenCV库:
OpenCV4Tegra
@devngle“Maybe”?你为什么不确定?顺便说一句,请注意,这些错误与您所指的opencv版本4不同,在我的主板上没有默认安装的opencv。
opencv4tegra
代表opencv for tegra。如果你的董事会没有这个,那就别提了。那么您已经安装了2.4并尝试安装3.2?@devngle我在安装过程中犯了一些错误(很久以前),最终安装了另一个版本的openCV(不记得是什么问题以及我最后做了什么)。今天,当我试图编译openCV代码时,突然发现了这个错误,无法编译代码。(我已经编译了好几个月了,直到今天,我不知道发生了什么)你可以自己搜索网页,但这里有一个简单的例子:
g++-L/usr/lib main.cpp-lopencv_core-lopencv_imgcodecs
这将搜索
libopencv_core.so
libopencv_imgcodecs.so
来自
/usr/lib
链接器将该库链接到你的代码。我猜你是在tegra董事会上。也许您应该删除默认安装的OpenCV库:
OpenCV4Tegra
@devngle“Maybe”?你为什么不确定?顺便说一句,请注意,这些错误与您所指的opencv版本4不同,在我的主板上没有默认安装的opencv。
opencv4tegra
代表opencv for tegra。如果你的董事会没有这个,那就别提了。那么您已经安装了2.4并尝试安装3.2?@devngle我在安装过程中犯了一些错误(很久以前),最终安装了另一个版本的openCV(不记得是什么问题以及我最后做了什么)。今天,当我试图编译openCV代码时,突然发现了这个错误,无法编译代码。(我已经编译了好几个月了,直到今天,我不知道发生了什么)你可以自己搜索网页,但这里有一个简单的例子:
g++-L/usr/lib main.cpp-lopencv_core-lopencv_imgcodecs
这将搜索
libopencv_core.so
libopencv_imgcodecs.so
/usr/lib
链接库到你的代码。