【问题标题】:How can I solve undefined reference errors with Conan and SDL2 on Ubuntu 16.10?如何在 Ubuntu 16.10 上使用柯南和 SDL2 解决未定义的参考错误?
【发布时间】:2017-04-15 04:49:39
【问题描述】:

我正在尝试通过关注their Geting Started guideconan 在测试项目中工作,以便我可以开始在实际项目中使用它。我试图在 Ubuntu 16.10 x64 上用 g++ 编译的 C++ 项目中使用 SDL2 和 glew。

我的 conanfile.txt 看起来像这样:

[requires]
SDL2/2.0.5@lasote/stable
glew/2.0.0@coding3d/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 目录和一个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'。为了解决这个问题,我尝试了herehere 的解决方案。虽然这些不是 SDL 特有的,但我找不到任何资源。

Here 是我正在使用的完整环境的 zip 文件,包括一个 MCVE。

【问题讨论】:

  • 致那些投反对票的人:为什么以及如何改进这个问题?

标签: c++ ubuntu conan


【解决方案1】:

您需要告诉 CMake 自己链接库,因为 conanbuildinfo.cmake 无法知道您的目标名称。

只需将此行添加到 CMakeLists.txt 文件的底部即可:

conan_target_link_libraries(conantest)

此命令将为 conanfile 中指定的所有依赖项调用 target_link_libraries

如果您想使用更“现代”的 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})
猜你喜欢
  • 1970-01-01
  • 2016-09-28
  • 2017-06-28
  • 2023-03-27
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多