Building SDL2_image as a CMake external project
我一直在尝试为应该使用SDL2_image库的项目创建基于CMake的构建系统。我不想强迫用户在系统上安装任何库来构建项目,因此我利用了CMake的能力,可以从源代码作为外部项目下载和构建依赖项(freetype,SDL2和SDL2_image)。铅>
freetype和SDL2(都包括现成的CMakeLists.txt文件)对一切都很好,但是我已经耗尽了如何使它适用于SDL2_image的想法。 CMake的外部项目支持自定义配置和构建设置,我在不同的变体中使用了这些设置,但没有成功。
可以在这里找到CMake文件本身,但是有问题的部分是:
1 2 3 4 5 6 7 8 9 | # SDL_image library ExternalProject_Add(sdl2_image_project URL https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.0.tar.gz DEPENDS sdl2_project PREFIX ${LIBS_DIR}/SDL2_image CONFIGURE_COMMAND LDFLAGS=-L${SDL2_BIN} CFLAGS=-I${SDL2_SRC}/include SDL2_CONFIG=${SDL2_BIN}/sdl2-config <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --enable-shared=no BUILD_COMMAND make INSTALL_COMMAND"" ) |
构建sdl2_image_project时发生错误。一些琐碎的研究发现,错误是由未定义的libdl部分引用引起的。这是孔误差的一小部分:
1 2 3 | libtool: link: gcc -I/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project/include -I/usr/local/include/SDL2 -D_REENTRANT -o showimage showimage.o -Wl,-rpath -Wl,/usr/local/lib -pthread -L/home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project-build ./.libs/libSDL2_image.a -L/usr/local/lib -lSDL2 -pthread /home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project-build/libSDL2.a(SDL_dynapi.c.o): In function `get_sdlapi_entry': /home/snikitin/_src/img_glypher/libs/SDL2/src/sdl2_project/src/dynapi/SDL_dynapi.c:227: undefined reference to `dlopen' |
我认为问题是由于链接器在将其链接到静态libSDL2.a时尝试创建共享版本的SDL2_image库而发生的。事情是-如果这是正确的-SDL2构建步骤会同时创建其自身的静态版本和共享版本,因此可以假设链接器将使用libSDL2-2.0.so(我实际上不需要共享库-只是静态库,但是除了将
经过大量的搜寻之后,我发现问题的可能根源是
如果有任何问题,我正在运行Ubuntu 14.04 x64。不胜感激任何建议!
看起来您需要链接一些库,例如
自定义
1 2 3 | --libs) echo -L${exec_prefix}/lib -Wl,-rpath,${libdir} -pthread -lSDL2 -lm -ldl ;; |
请注意,顺序很重要(这就是为什么仅修改LIBS对我不起作用)的原因。
现在,该文件可以在您的
1 2 3 | ... ... CFLAGS=-I${SDL2_SRC}/include SDL2_CONFIG=${CMAKE_CURRENT_LIST_DIR}/sdl2-config <SOURCE_DIR>/configure ... |