1

我有Ubuntu 12.04 (Precise Pangolin)的BeagleBone Black 。我使用以下命令从 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 机器上交叉编译了 OpenCV wiki 上提供的代码和-DUSE_NEON=ON标志。我将这些头文件和库复制到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

等等

4

2 回答 2

0

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

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

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

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

这是巧合,而不是因为您的链接命令是正确的。

于 2013-08-31T06:02:05.767 回答
0

我不小心编译了 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

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

于 2013-09-02T17:24:31.940 回答