适当地包括带有自动工具的GLib头

时间:2012-01-23 21:52:00

标签: autotools glib

在我的普通开发环境(ubuntu)中,我没有遇到任何与GLib-2.0链接的问题,但是当我尝试在新安装的Debian Squeeze上构建时,我遇到连接GLib的错误。

configure.ac:

...
AC_PROG_CC
AM_PROG_CC_C_O
CFLAGS="$CFLAGS -Wall -W -Wno-unused-parameter -std=c99 -pedantic"

PKG_CHECK_MODULES(MYAPP, [glib-2.0 >= 2.3.0  gthread-2.0])

LIBS="$LIBS $MYAPP_LIBS"

AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

Autotools似乎将正确的选项传递给gcc:

-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lgthread-2.0 -lglib-2.0

但是,运行make我收到编译错误:undefined reference to 'g_list_free_full'

验证库是否已实际安装:

$ dpkg --get-selections | grep glib
libglib2.0-0                    install
libglib2.0-data                 install
libglib2.0-dev                  install

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

需要注意的事项:

   stormfs_LDADD = $(LIBS) $(LIBGCRYPT_LIBS)
>> stormfs_LDFLAGS = $(STORMFS_LIBS)                                               

(请参阅此处的Linker flags in wrong place。)
那应该是:

stormfs_LDADD = ${LIBS} ${LIBGCRYPT_LIBS} ${STORMFS_LIBS}

(但这有点多余,因为LIBS和STORMFS_LIBS都包含相同的值,就像我查看生成的Makefile一样。)

修改

nm -D /usr/lib64/libglib-2.0.so | grep g_list_free_full
0000000000042740 T g_list_free_full

所以libglib.so(你的路径可能会有所不同)至少包含g_list_free_full至少glib2-2.30.1。根据文档,此功能仅在glib2-2.28之后可用,但您的安装可能太旧了。最佳使用(最好每个变量只有一个pkg依赖项,以便于检测无法找到[deps]部分的确切内容):

#configure.ac
PKG_CHECK_MODULES([libgthread], [gthread-2.0])
PKG_CHECK_MODULES([libglib], [glib-2.0 >= 2.28])