2

我想在我的项目中使用 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@
4

3 回答 3

3

更正/添加到 ptomato 的答案:

简而言之:实际上 freeglut 是过剩的,所以这样做:

AC_CHECK_LIB([glut], [glutInit])

说明:freeglut 是 OpenGL 实用工具包 (GLUT) 的旧/非自由实现的替代品。在今天的发行版中,freeglut 被安装为这些旧的/非免费的 GLUT 安装的替代品。这是通过设置--enable-replace-glutfreeglut 的配置选项来完成的。因此,调用库libglut而不是libfreeglut. 以Ubuntu 的 freeglut 包为例;它包含/usr/lib/libglut.so.3.

并且为了支持将 freeglut 安装为 libfreeglut 而不是 libglut 的旧发行版,您还需要检查这一点。

于 2011-01-19T19:49:39.377 回答
1

Pkg-config是一个为库查找必要的编译器标志和链接器标志的程序。PKG_CHECK_MODULES([NAME], [libraries])是一个 autoconf 宏,它查找标志libraries并将它们放入两个变量中,NAME_CFLAGS并且NAME_LIBS. 并非所有库都支持它。

为了支持 pkg-config,库必须安装 .pc 文件。查看freeglut 的源代码似乎没有,所以我断定它不支持 pkg-config。

当一个库不支持 pkg-config 时,你应该做的是查看它的文档,看看它是否提到了你应该使用的任何编译器标志和链接器标志。我在任何地方都找不到提到这一点。

由于这失败了,下一个最好的事情就是假设库不需要任何额外的编译器标志,并且只需要一个链接器标志:-l<name>,在这种情况下-lfreeglut。您还可以使用 autoconf 宏自动为您检查。您可以将其添加到您的configure.ac喜欢中:

AC_CHECK_LIB([freeglut], [glutInit])

如果存在 freeglut 库,这将自动添加-lfreeglut,因此您不必在.LIBSMakefile.am

于 2010-09-24T10:09:34.720 回答
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])
于 2012-09-01T00:59:21.273 回答