Travis CI对SDL2和GLEW函数的未定义引用

问题描述 投票:0回答:1

我正在尝试使用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的输出。还是没有运气。

travis-ci sdl-2 automake undefined-reference glew
1个回答
0
投票

我将从在PKG_CHECK_MODULES中使用configure.ac开始,以便运行configure的输出将告诉我有关pkg-config是否实际找到glew.pcsdl2.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中添加版本要求,以确保存在所需的功能。当然,这可能会导致您的程序正式无法在这些系统上构建。

© www.soinside.com 2019 - 2024. All rights reserved.