gcc - 链接时 Autotools 构建失败
问题描述
我有一个项目正在努力转换为自动工具。
以下是相关文件
配置.ac
AC_INIT([opengl-es-demo], [1])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_LANG(C++)
AC_PROG_CXX
PKG_CHECK_MODULES(LIBPNG, libpng >= 1.6.34)
PKG_CHECK_MODULES(FREETYPE2, freetype2 >= 21.0.15)
PKG_CHECK_MODULES(EGL, egl > 0)
PKG_CHECK_MODULES(GLES2, glesv2 > 0)
PKG_CHECK_MODULES(PTHREAD, pthread-stubs > 0)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
生成文件.am
bin_PROGRAMS = main
main_SOURCES = main.cpp eglManager.cpp shaderManager.cpp imageUtils.cpp freetypeUtils.cpp texture.cpp shader.cpp camera.cpp
main_CPPFLAGS = $(FREETYPE2_CFLAGS) $(LIBPNG_CFLAGS) $(EGL_CFLAGS) $(GLES2_CFLAGS) $(PTHREAD_CFLAGS)
main_LDFLAGS = $(FREETYPE2_LIBS) $(LIBPNG_LIBS) $(EGL_LIBS) $(GLES2_LIBS) $(PTHREAD_LIBS)
链接器调用此步骤...
g++ -g -O2 -lfreetype -lpng16 -lz -lEGL -lGLESv2 -o main main-main.o main-eglManager.o main-shaderManager.o main-imageUtils.o main-freetypeUtils.o main-texture.o main-shader.o main-camera.o
...然后失败,出现一堆未定义的对 OpenGL(-GLESv2)、png(-lpng16) 和 freetype(-lfreetype) 库中的函数的引用错误。
当我不使用 autotools(只有一个 makefile)时它编译得很好,所以我知道问题出在我的 autotools 使用上。
我在哪里搞砸了配置?
解决方案
改变main_LDFLAGS
以main_LDADD
解决问题。
推荐阅读
- oracle - 从核心 1.0 升级到 2.2
- html - node_modules/ngx-bootstrap/chronos/utils/type-checks.d.ts(8,62) 中的错误:错误 TS2304:找不到名称“提取”
- shell - 外壳:分解并保存文件
- rest - Confluence REST API 不起作用:无法解码 JSON 对象
- json - 如何使用 googleapis 在 Flutter 中创建 Json 文件并将其保存到 Google Drive
- php - codeigniter 中的 URL 缩短器
- azure - 无法在 Azure 中创建指标
- objective-c - 在 Objective-C 的异步工作流中维护任务序列
- jenkins - Jenkins,如何在“QuietDown”期间触发构建
- sql - SQL 除外运算符和 CTE 选择第一个查询中的所有项目,但不选择第二个查询中的所有项目