使用makefile在Linux中对SDL函数的未定义引用

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

我正在使用一个称为ENKI的开源模拟器。它附带了一个示例,其中禁用了所有SDL功能。我通过定义一个变量来启用它。但是,现在make返回所有SDL函数的错误,例如未定义对`SDL_Init']的引用

#define USE_SDL 0 // This is the line I added

#ifdef USE_SDL
#include </usr/include/SDL/SDL.h>
#endif

我查看了makefile及其调用/引用的其他文件。但是,我不知道应该更改什么。我看到了一些关于在makefile中进行修改的解决方案,但是由于cmake的结构非常复杂,因此我不确定应该在哪里进行这些更改

Playground.cpp.o:
    cd /home/yadav/Downloads/enki && $(MAKE) -f examples/playground/CMakeFiles/enkiplayground.dir/build.make examples/playground/CMakeFiles/enkiplayground.dir/Playground.cpp.o
.PHONY : Playground.cpp.o

我相信这是makefile的一部分,它从cpp文件构建对象,并从上面的路径调用build.make文件。

examples/playground/CMakeFiles/enkiplayground.dir/Playground.cpp.o: examples/playground/Playground.cpp
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/yadav/Downloads/enki/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object examples/playground/CMakeFiles/enkiplayground.dir/Playground.cpp.o"
    cd /home/yadav/Downloads/enki/examples/playground && /usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/enkiplayground.dir/Playground.cpp.o -c /home/yadav/Downloads/enki/examples/playground/Playground.cpp 

而且我认为这是使用flag.make中的参数实际创建对象的行,如下所示:

CXX_FLAGS =   -fPIC -std=gnu++11

CXX_DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB

CXX_INCLUDES = -I/home/yadav/Downloads/enki/examples/playground/enkiplayground_autogen/include -I/home/yadav/Downloads/enki -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/include/x86_64-linux-gnu/qt5/QtOpenGL 
CMakeFiles/enkiplayground.dir/Playground.cpp.o: In function `EnkiPlayground::EnkiPlayground(Enki::World*, QWidget*)':
Playground.cpp:(.text._ZN14EnkiPlaygroundC2EPN4Enki5WorldEP7QWidget[_ZN14EnkiPlaygroundC5EPN4Enki5WorldEP7QWidget]+0xa1): undefined reference to `SDL_Init'
Playground.cpp:(.text._ZN14EnkiPlaygroundC2EPN4Enki5WorldEP7QWidget[_ZN14EnkiPlaygroundC5EPN4Enki5WorldEP7QWidget]+0xc9): undefined reference to `SDL_GetError'
Playground.cpp:(.text._ZN14EnkiPlaygroundC2EPN4Enki5WorldEP7QWidget[_ZN14EnkiPlaygroundC5EPN4Enki5WorldEP7QWidget]+0x106): undefined reference to `SDL_NumJoysticks'

这是我得到的错误的开始。

我正在使用一个称为ENKI的开源模拟器。它附带了一个示例,其中禁用了所有SDL功能。我通过定义一个变量来启用它。但是,现在make返回所有SDL的错误...

c++ c linux makefile sdl
1个回答
0
投票
#define USE_SDL 0 // This is the line I added

#ifdef USE_SDL
#include </usr/include/SDL/SDL.h>
#endif
© www.soinside.com 2019 - 2024. All rights reserved.