使用 OpenCV 和 caff 编译时对"g_mutex_lock"的未定义引用
Undefined reference to `g_mutex_lock' when compiling with OpenCV and caffe
当我编译使用 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_mutex_lock(来找出它来自哪个库。在这种情况下,它是glib。然后,在他们的文档中查找有关编译使用其库的应用程序的帮助(如果您自己无法弄清楚(。在这种情况下,你最终会在这里。
确保安装了所有必需的包后,可以根据需要扩充编译器选项。
在您的情况下,请尝试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 配置的使用。作为参考,编译仅使用 glib 的示例应用程序可能如下所示: gcc hello.c `pkg-config --cflags --libs glib-2.0`
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 尝试构建"lock-free"数据结构C++
- std::mutex 如何防止线程修改?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 使用Mutex,lock_guard,在课堂中正确地lock
- 当我调用lock()时,为什么std :: mutex会引发异常
- mutex.lock vs unique_lock
- mutex::lock() 检查一次解锁状态是否已经被另一个线程锁定?
- “std::mutex”和“std::lock”是否保证处理器间代码中的内存同步
- "mutex"和"lock"有什么区别?
- std::mutex::lock可以抛出即使一切看起来"good"?
- 什么是更好的 std::lock_guard<std::mutex> lock(std::mutex mutex_var); 或 std::mutex mutex_var.lock();
- std::lock_guard<std::mutex> lock(m) 是否有简写?
- 是否有任何惯用的显式使用mutex::lock()或unlock()
- PThread Mutex Lock & Unlock on Stack
- std::mutex::lock在Windows上失败,错误码3