Ubuntu14.04交叉编译libnice-0.13.0至arc-linux-uclibc遇GMutex错误求助
解决交叉编译libnice-0.1.13时GMutex类型不完整的问题
这问题我之前帮人排查过类似的,本质是交叉编译环境下glib依赖配置或线程模块支持的问题,我一步步给你梳理解决思路:
1. 确保交叉编译的glib被正确识别
libnice依赖pkg-config查找glib的头文件和库路径,你得先保证configure过程用的是你交叉编译好的glib,而不是主机Ubuntu系统的glib:
- 先设置
PKG_CONFIG_PATH指向交叉编译glib的pkgconfig目录:export PKG_CONFIG_PATH=/path/to/your/cross-glib-2.28.7/lib/pkgconfig - 重新运行configure命令,指定交叉编译目标:
注意:运行完configure后,检查输出里的./configure --host=arc-linux-uclibc --prefix=/your/libnice-install-pathGLIB_CFLAGS和GLIB_LIBS字段,确认它们指向的是你交叉编译的glib路径,而不是主机的/usr/include或/usr/lib。
2. 确认交叉编译glib时启用了线程支持
GMutex属于glib的线程模块,如果编译glib时没开线程支持,头文件只会声明GMutex而不会提供完整定义:
- 回忆下你编译glib时的配置,有没有加
--enable-threads=posix参数?如果没有,得重新编译glib:cd /path/to/glib-2.28.7 ./configure --host=arc-linux-uclibc --prefix=/your/cross-glib-path --enable-threads=posix make && make install
3. 手动补充头文件引用(临时验证/快速修复)
如果上面两步都没问题,可能是libnice的代码没显式包含GMutex所在的头文件:
- 打开报错的
../agent/component.h文件,在已有的glib头文件引用后,添加:
GMutex的完整定义就在#include <glib/gthread.h>gthread.h里,有些场景下glib不会自动包含这个头文件,需要显式引用。
做完以上步骤后,重新运行make应该就能解决这个类型不完整的错误了。
内容的提问来源于stack exchange,提问作者sampath
相关产品推荐
相关产品推荐

