【问题标题】:OpenCV linking issue on BeagleBone Black and Ubuntu 12.04 (Precise Pangolin)BeagleBone Black 和 Ubuntu 12.04(Precise Pangolin)上的 OpenCV 链接问题
【发布时间】:2013-08-30 11:23:46
【问题描述】:

我有BeagleBone BlackUbuntu 12.04(精确穿山甲)。我使用以下命令从 apt 下载了OpenCV 库:

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

几秒钟后,它显示它无法找到带有“lrint”的引用等等,最后显示了 cvNameWindow、cvShowImage 等的链接错误。

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

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

注意:/media/misc/ 是额外的分区。

这个命令给了我和之前一样的输出。现在我要说到点子上了。也许我没有发出正确的命令。

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

unable to find reference cvNamedWindow
unable to find reference cvShowImage

等等

【问题讨论】:

  • 这两个视频你试过了吗? www.youtube.com/watch?v=Sb0noQkTTjA‎ 和 www.youtube.com/watch?v=T29BLCh1I54‎
  • 你的命令行有错字,你有-I/usr/inlcude/,但是-I/usr/include/应该是正确的。但是我没有在这里安装 opencv 以了解可能产生的影响。
  • 是的,但我没有在现有命令中打错字。虽然,我在链接库时遇到了问题。
  • 我找到了一种方法,我下载了 Angstrom 映像,抓取了 opencv 库,并将这些库手动包含到我现有的 Beaglebone Sdcard Image 中。现在它正在工作:D

标签: opencv ubuntu linker arm beagleboneblack


【解决方案1】:

您的链接命令有:-lopencv_core -lopencv_highgui -lm opencv_test.c

这是错误的参数顺序。要了解原因,请阅读this

如果我将此命令提供给我现有的 ubuntu x82 机器,它编译得非常好...

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

coincidence 发生这种情况,不是因为您的链接命令正确。

【讨论】:

  • 如果我把这个命令给我现有的 ubuntu x82 机器,它编译得非常好......
  • 是的,那是巧合,我改变了我的链接代码,我按照samples/c/build_all.sh中给出的命令,它是:g++ pkg-config --cflags opencv $1 -o $2 pkg-config --libs opencv(那里是勾号,没有显示)现在链接没有问题,非常感谢你们......
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多