我正在尝试使用Travis CI(首次用户)来构建我的项目。它使用automake并针对SDL2和GLEW进行链接,并使用./configure && make
在本地进行精细编译,但是在travis上使用未定义的SDL2和GL函数引用失败。
我尝试更改链接库的顺序。
。travis.yml
language: cpp
compiler:
- gcc
os:
- linux
before_install:
- sudo apt-get update
- sudo apt-get install libegl1-mesa-dev libglew-dev libsdl2-dev autoconf automake autotools-dev
- autoreconf --force --install
Makefile.am
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = mines
mines_SOURCES = \
src/main.cpp \
src/gl_shader.cpp \
src/display_window.cpp \
src/mines_sys.cpp \
src/nes_cpu.cpp \
src/nes_ppu.cpp \
src/_nes_apu.cpp \
src/nes_cart.cpp \
src/nes_controllers.cpp \
src/ines_mapper.cpp \
src/ines_mapper0.cpp \
src/ines_mapper1.cpp \
src/ines_mapper2.cpp \
src/ines_mapper3.cpp \
src/ines_mapper7.cpp \
src/Nes_Snd_Emu-0.1.7/Sound_Queue.cpp \
src/Nes_Snd_Emu-0.1.7/Wave_Writer.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/apu_snapshot.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Blip_Buffer.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Multi_Buffer.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Nes_Apu.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Nes_Namco.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Nes_Oscs.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Nes_Vrc6.cpp \
src/Nes_Snd_Emu-0.1.7/nes_apu/Nonlinear_Buffer.cpp
mines_CXXFLAGS = -Wall -Wno-c++11-narrowing -std=c++11 -Isrc/Nes_Snd_Emu-0.1.7 `pkg-config --cflags glew sdl2`
mines_LDFLAGS = `pkg-config --libs glew sdl2`
任何建议,不胜感激,谢谢。
编辑:忘记提及了,我还尝试了分别链接SDL2和GLEW以及直接粘贴pkg-config的输出。还是没有运气。
我将从在PKG_CHECK_MODULES
中使用configure.ac
开始,以便运行configure
的输出将告诉我有关pkg-config是否实际找到glew.pc
和sdl2.pc
的信息:
PKG_CHECK_MODULES([GLEW], [glew])
PKG_CHECK_MODULES([SDL2], [sdl2])
可能甚至将AC_MSG_ERROR
作为第四个参数action-if-not-found
。
然后,我看一下要向其中添加GLEW_LIBS和GLEW_CFLAGS的哪些构建变量,并且请记住,_LDFLAGS
并非要向以下库添加库:
mines_CXXFLAGS += $(GLEW_CFLAGS)
mines_LDADD += $(GLEW_LIBS)
mines_CXXFLAGS += $(SDL2_CFLAGS)
mines_LDADD += $(SDL2_LIBS)
然后,我将检查Travis CI系统上的库版本中是否确实存在缺少的功能。在本地运行Fedora,因此是一个相对较新的系统,我对Travis CI的Ubuntu系统上的库有多旧感到惊讶。
如果Travis CI的系统只是源代码不支持的旧库,那么可能有必要在PKG_CHECK_MODULES
调用中或AC_TRY_COMPILE或AC_TRY_LINK中添加版本要求,以确保存在所需的功能。当然,这可能会导致您的程序正式无法在这些系统上构建。