如何在Ubuntu 16.10上使用Conan和SDL2解决未定义的引用错误?
我想通过跟随their Geting Started guide得到conan在一个测试项目中工作,以便我可以开始在真实项目中使用它。我试图在一个C++项目中使用SDL2,并在Ubuntu 16.10 x64上使用g ++编译。如何在Ubuntu 16.10上使用Conan和SDL2解决未定义的引用错误?
我conanfile.txt看起来是这样的:
[requires]
SDL2/[email protected]/stable
glew/[email protected]/stable
[generators]
cmake
我的CMakeLists.txt文件看起来像这样:
project(conantest)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
include(conan/conanbuildinfo.cmake)
conan_basic_setup()
set(SRC_FILES main.cpp Display.cpp)
add_executable(conantest ${SRC_FILES})
我的项目包括含的CMakeLists.txt,conanfile.txt一个目录,我的所有源代码,Cmake的构建目录,Conan的conan目录以及rebuild.sh。我正在使用这个rebuild.sh脚本来清理和构建项目,只要我对构建环境进行了更改(rm -r,尽管它在工作之后并不是最理想的,但仍然可以确保一旦我尝试删除之前设置的任何错误一个修复)。
我rebuild.sh看起来是这样的:
rm -r ./build/*
rm -r ./conan/*
cd conan
conan install ..
cd ../build
cmake ..
make
当我运行此脚本,一切都似乎是工作,直到 最终可执行链接。当发生这种情况时,我得到Display.cpp:(.text+0x8a): undefined reference to `SDL_Init'
。为了解决这个问题,我尝试了解决方案here和here。虽然这些不是特定于SDL,但我无法找到任何资源。
Here是我使用,包括MCVE全环境的zip文件。
你需要告诉CMake的反对图书馆自己进行关联,因为conanbuildinfo.cmake
无法知道你的目标的名称。
只需添加这一行到您CMakeLists.txt
文件的底部将工作:
conan_target_link_libraries(conantest)
此命令将调用target_link_libraries在conanfile指定的所有依赖关系。
这里,如果你想用一个更“现代”的CMake的做法,更关注目标,而不是全局设置另一个CMakeLists.txt
例如:
cmake_minimum_required(VERSION 3.5)
project(conantest)
include(conan/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
add_executable(conantest main.cpp Display.cpp)
set_property(TARGET conantest PROPERTY CXX_STANDARD 11)
target_link_libraries(conantest CONAN_PKG::SDL2 CONAN_PKG::glew)
你也可以显式调用的target_link_libraries: ''target_link_libraries(conantest $ {} CONAN_LIBS)'' – lasote
那些谁是downvoting:为什么我应该怎么提高题? – john01dav