我想在我的项目中使用freeglut。
在我的configure.ac中,它看起来像这样,它对于SDL就像这样工作,所以我只是替换了一些魔药,并希望它也适用于freeglut,但事实并非如此。那么我做错了什么?
# Check for freeglut
PKG_CHECK_MODULES([FREEGLUT], [freeglut >= 3.0])
AC_SUBST(FREEGLUT_CFLAGS)
AC_SUBST(FREEGLUT_LIBS)
还有什么要写入Makefile.am?对于SDL,它看起来像这样:
INCLUDES = @SDL_CFLAGS@
LDADD = @SDL_LIBS@
答案 0 :(得分:2)
纠正/增加ptomato的答案:
简短:实际上freeglut是过剩的,所以:
AC_CHECK_LIB([glut], [glutInit])
说明:freeglut是OpenGL Utility Toolkit(GLUT)的旧/不自由实现的替代品。在今天的发行版中,freeglut被安装为这些旧的/不自由的GLUT安装的替代品。这是通过设置freeglut的--enable-replace-glut
配置选项来完成的。因此,该库名为libglut
,而不是libfreeglut
。看一下Ubuntu's freeglut package的例子;它包含/usr/lib/libglut.so.3
。
为了支持旧的发行版,将freeglut安装为libfreeglut而不是libglut,你也需要检查它。
答案 1 :(得分:1)
Pkg-config是一个查找库的必要编译器标志和链接器标志的程序。 PKG_CHECK_MODULES([NAME], [libraries])
是一个autoconf宏,用于查找libraries
的标记,并将它们分为两个变量NAME_CFLAGS
和NAME_LIBS
。并非所有图书馆都支持它。
为了支持pkg-config,库必须安装.pc文件。看freeglut's source code似乎没有一个,所以我得出结论它不支持pkg-config。
当库不支持pkg-config时,您应该做什么,请查看its documentation以查看它是否提到您应该使用的任何编译器标志和链接器标志。我无法在任何地方找到这一点。
由于失败,下一个最好的事情就是假设库不需要任何额外的编译器标志,并且只需要一个链接器标志:-l<name>
,在本例中为-lfreeglut
。您还可以使用autoconf宏自动为您检查。您可以像这样添加configure.ac
:
AC_CHECK_LIB([freeglut], [glutInit])
如果freeglut库存在,这会自动将-lfreeglut
添加到LIBS
,因此您不必在Makefile.am
中添加任何额外内容。
答案 2 :(得分:0)
dnl Check for GLUT
GLUT_CFLAGS=""
GLUT_LIBS=-lglut
glut_enabled=yes
AC_ARG_WITH([glut],
[AS_HELP_STRING([--with-glut=DIR],
[glut install directory])],
[GLUT_CFLAGS="-I$withval/include"
GLUT_LIBS="-L$withval/lib -lglut"])
AC_CHECK_HEADER([GL/glut.h],
[],
[glut_enabled=no])
AC_CHECK_LIB([glut],
[glutInit],
[],
[glut_enabled=no])