【问题标题】:Undefined reference to `g_mutex_lock' when compiling with OpenCV and caffe使用 OpenCV 和 caffe 编译时对“g_mutex_lock”的未定义引用
【发布时间】:2017-05-23 07:20:21
【问题描述】:

当我编译使用 OpenCV 和 caffe 的代码时,我收到以下链接器错误:

../libs/libopencv_highgui.so: undefined reference to `g_mutex_lock'
../libs/libgstbase-0.10.so.0: undefined reference to `g_cond_init'
../libs/libopencv_highgui.so: undefined reference to `g_mutex_unlock'
../libs/libopencv_highgui.so: undefined reference to `g_cond_broadcast'
../libs/libgstreamer-0.10.so.0: undefined reference to `g_cond_wait_until'
../libs/libopencv_highgui.so: undefined reference to `g_mutex_new'
...
collect2: ld returned 1 exit status

这是我的 g+ 命令:

 g++ -DCPU_ONLY=1 test.cpp -o test -I../include -I../include/openblas -L../libs 
 -Wl,-rpath=../libs -lcaffe -lglog -lboost_system -lopencv_core -lopencv_highgui 
 -lopencv_imgproc

我错过了什么?

【问题讨论】:

  • 你链接到 glib 吗?向我们展示你传递给 g++ 的内容。
  • 好的,我已经编辑了我的问题。
  • @GillBates 这两个问题略有不同。这个 OP 根本不知道链接到 glib。另一个以错误的顺序链接到它。

标签: c++ opencv g++ shared-libraries cross-compiling


【解决方案1】:

是的,这是一个不针对 glib 链接的简单案例。

一般来说,要修复这种事情,谷歌搜索其中一个符号名称(例如 g_mutex_lock)来找出它来自哪个库。在这种情况下,它是 glib。然后,查看他们的文档以帮助编译使用他们的库的应用程序(如果您自己无法弄清楚)。在这种情况下,你最终会得到here

一旦你确定你已经安装了所有必需的包,你就可以根据需要增加你的编译器选项。

你的情况,试试g++ -DCPU_ONLY=1 test.cpp -o test `pkg-config --cflags glib-2.0` -I../include -I../include/openblas `pkconfig --libs glib-2.0` -L../libs -Wl,-rpath=../libs -lcaffe -lglog -lboost_system -lopencv_core -lopencv_highgui -lopencv_imgproc

注意 pkg-config 的使用。作为参考,编译仅使用 glib 的示例应用程序可能如下所示:gcc hello.c `pkg-config --cflags --libs glib-2.0`

【讨论】:

    最近更新 更多