【问题标题】:Basic build issue regarding libs, pkg-config and opencv关于库、pkg-config 和 opencv 的基本构建问题
【发布时间】:2012-05-18 13:27:20
【问题描述】:

我已经成功构建并安装了 opencv 库。现在我试图在我的应用程序中使用这些库,但我不断收到链接错误。我正在使用:

pkg-config --libs opencv

当我在命令行上运行它时,我可以看到输出。它列出了很多库,但并非所有库都列出了指定的绝对路径。例如,这里是部分输出:

libippcc_l.a libippvm_l.a tbb rt pthread m dl /usr/lib/libXext.s stdc++

当我构建我的应用程序时,我会遇到链接错误。这是部分输出:

g++: libipps_l.a: No such file or directory
g++: libippi_l.a: No such file or directory
g++: libippcv_l.a: No such file or directory
g++: libippcc_l.a: No such file or directory
g++: libippvm_l.a: No such file or directory
g++: tbb: No such file or directory
g++: rt: No such file or directory
g++: pthread: No such file or directory
g++: m: No such file or directory
g++: dl: No such file or directory
g++: stdc++: No such file or directory

链接器似乎无法解析不包含绝对路径的库,这似乎是合理的。但我的困惑是为什么 pkg-config 的输出不包含其所有库的绝对路径?当我不在构建行上使用“pkg-config --libs opencv”时,英特尔 ipp、pthread、m、stdc++ 等的库得到正确解析,并且应用程序构建良好,因为我还在链接行上指定了它们如:“-lpthread -lstdc++”...等。这些位于链接行上我指定之后:“pkg --libs opencv”

但是使用“pkg-config --libs opencv”会搞砸分辨率。

我已经从命令行运行“ldconfig”来更新我的 libs 目录中的所有符号链接,但这并没有解决这个问题。

任何帮助将不胜感激。

【问题讨论】:

  • 我很想改标题...但我不会。
  • 抱歉标题。我是新来的,正在学习什么是正确的行为。当构建问题阻碍进度时,我会感到有些沮丧。

标签: linux opencv g++


【解决方案1】:

如果pkg-config --libs opencv 正在输出那个,那么你就有问题了。可能是之前安装的 OpenCV 损坏了它,或者您使用的版本不够新,或者它没有编译成功,或者存储库中的最新版本有问题。

无论如何,我在 Mac OS X 上使用 OpenCV 2.3.1,pkg-config --libs opencv 输出以下信息:

-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann 

您可以尝试手动编译您的应用程序,看看是否有其他问题:

g++ test.cpp -o test -I/usr/local/include/opencv -I/usr/local/include  -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann

请注意,您的安装可能已将 OpenCV 头文件和库放在不同的目录中。

【讨论】:

  • 感谢您的帮助。我将回到第一方并重建opencv。只知道 pkg-config 应该在库名称前输出“l”会有所帮助。所以我可以在继续之前先解决低级问题。
  • 你可能想看看how I did it with v2.4.0
【解决方案2】:

我认为您的问题可能与我遇到的问题有关,并且此pull request 的主题与opencv 有关。我的猜测是:您是在 linux 机器上从源代码安装?如果您找到您的opencv.pc 文件(可能位于/usr/local/lib/pkgconfig/opencv.pc),并在其中的违规词之前添加-l(rt pthread 等),您的情况会改变吗?

注意:从源代码安装会生成一个新的(坏的)opencv.pc,它会覆盖您进行我建议的更改的那个,所以如果您经历了更多的重建安装周期,请记住修复 opencv在尝试重建程序之前再次 .pc。

【讨论】:

    【解决方案3】:

    这是由新的 CMake 或行为不端的 CMake 引起的 - 通常在我的实践中 :) 解决起来非常简单 - 手动编辑 opencv.pc 并在名称中添加缺少的“-l”前缀。而已!此修复后所有其他问题都消失了。第二个常见的问题是 PKG_CONFIG_PATH 本身 - 将它添加到你的 shell GLOBAL(!!) 配置文件脚本中,然后重新启动 shell 并通过 printenv 命令或类似的东西验证它。

    【讨论】:

      【解决方案4】:

      您可以尝试搜索“opencv.pc”来查找路径。对我来说,包裹在

      /Applications/opencv-2.4.11/build/unix-install/
      

      因此,对我来说有效的命令是:

      pkg-config --libs /Applications/opencv-2.4.11/build/unix-install/opencv.pc 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-05
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        • 2016-08-30
        相关资源
        最近更新 更多