BeagleBone Black和Ubuntu 12.04(精确穿山甲)上的OpenCV链接问题

BeagleBone Black和Ubuntu 12.04(精确穿山甲)上的OpenCV链接问题,opencv,ubuntu,linker,arm,beagleboneblack,Opencv,Ubuntu,Linker,Arm,Beagleboneblack,我吃过(精确的穿山甲)。我使用以下命令从apt下载了库: sudo apt-get install -y libopencv-dev 此命令安装了所需的标头和库。然后我编译了我自己的程序,它只是用以下命令显示一个窗口: gcc -I/usr/inlcude/ -I/usr/include/opencv2/ -L/usr/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test gcc -I/usr/inlcude/ -I/me

我吃过(精确的穿山甲)。我使用以下命令从apt下载了库:

sudo apt-get install -y libopencv-dev
此命令安装了所需的标头和库。然后我编译了我自己的程序,它只是用以下命令显示一个窗口:

gcc -I/usr/inlcude/ -I/usr/include/opencv2/ -L/usr/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
gcc -I/usr/inlcude/ -I/media/misc/opencv/include/opencv/ -I/media/misc/opencv/include/ -L/usr/lib/ -L/media/misc/opencv/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
g++ `pkg-config --cflags opencv` $1 -o $2 `pkg-config --libs opencv`
几秒钟后,它显示无法找到带有“lrint”和更多内容的引用,最后显示cvNameWindow、cvShowImage等的链接错误

我认为这可能是已安装库的问题。我下载了最新的OpenCV源代码,在我的Ubuntu机器上用
-DUSE_NEON=on
标志交叉编译OpenCV wiki上提供的代码。我将这些头和库复制到额外的分区中,该分区已格式化。我再次发出以下命令:

gcc -I/usr/inlcude/ -I/usr/include/opencv2/ -L/usr/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
gcc -I/usr/inlcude/ -I/media/misc/opencv/include/opencv/ -I/media/misc/opencv/include/ -L/usr/lib/ -L/media/misc/opencv/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
g++ `pkg-config --cflags opencv` $1 -o $2 `pkg-config --libs opencv`
注意:/media/misc/是额外的分区

此命令提供与前面相同的输出。现在我要说到点子上了。也许我没有发出正确的命令

我还将gcc更改为g++,它会给我以下错误:

unable to find reference cvNamedWindow
unable to find reference cvShowImage

等等。

您的link命令有:
-lopencv\u core-lopencv\u highgui-lm opencv\u test.c

这是错误的论点顺序。要了解原因,请阅读


如果我把这个命令给我现有的ubuntu x82机器,它编译得非常好

你的意思是“它链接得很好”


发生这种情况并不是因为你的link命令是正确的。

我无意中编译了OpenCV tarball中给出的示例代码,并编译了该代码。然后我查看了构建脚本,发现了以下命令:

gcc -I/usr/inlcude/ -I/usr/include/opencv2/ -L/usr/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
gcc -I/usr/inlcude/ -I/media/misc/opencv/include/opencv/ -I/media/misc/opencv/include/ -L/usr/lib/ -L/media/misc/opencv/lib/ -lopencv_core -lopencv_highgui -lm opencv_test.c -o test
g++ `pkg-config --cflags opencv` $1 -o $2 `pkg-config --libs opencv`
它实际上是一个脚本
$1
是第一个参数,即.cpp文件,
$2
是第二个参数,即输出文件。我使用这个脚本如下:

./build_cv.sh opencv_test.cpp test
注意:确保脚本文件“build_cv.sh”具有执行权限。如果不是,则通过键入以下内容更改其权限:

chmod +x build_cv.sh

现在问题来了。在第一次尝试中,我给出了头文件和库的位置。我必须在给出源文件之前给出头的位置,在输出文件之后给出库的位置。这是我的经验;也许其他人有另一种编译代码的方法。

你试过这两个视频吗?www.youtube.com/watch?v=Sb0noQkTTjA‎ 和www.youtube.com/watch?v=T29BLCh1I54‎命令行中有一个输入错误,您有-I/usr/inlcude/,但是-I/usr/include/应该是正确的。然而,我并没有在这里安装opencv来了解它可能产生的影响。是的,但我并没有在现有的命令中输入错误。尽管如此,我在链接这些库时遇到了一些问题。我找到了一种方法,下载了Angstrom图像,抓取了opencv库,并手动将这些库包含到我现有的Beaglebone SD卡图像中。现在它开始工作了:如果我把这个命令给我现有的ubuntu x82机器,它编译得非常好……是的,这是巧合,我更改了我的链接代码,我遵循了samples/c/build_all.sh中给出的命令,它是:g++
pkg配置--cflags opencv
$1-o$2
pkg配置--libs opencv
(有滴答声,没有显示)现在链接没有问题了,非常感谢大家。。。。