【发布时间】:2018-09-02 19:52:03
【问题描述】:
我有一个奇怪的行为,如果需要动态链接,CMake 无法链接任何可执行文件。 g++ 无法找到库中定义的任何符号。
我发现它可能与链接时 CMake 传递给 g++ 的参数的顺序有关。
这是构建过程的详细输出(链接失败):
[ 50%] Building CXX object CMakeFiles/chargen.dir/test.cpp.obj
g++ -std=c++11 -o CMakeFiles/test.dir/test.cpp.obj -c /f/test/test.cpp
[100%] Linking CXX executable mytest
/usr/bin/cmake -E cmake_link_script CMakeFiles/test.dir/link.txt --verbose=1
g++ -std=c++11 -lSDL2 CMakeFiles/test.dir/test.cpp.obj -o mytest
确实,如果我尝试使用该命令进行链接,我会得到未定义的引用,但是如果我在最后使用库标志进行编译:
g++ -std=c++11 CMakeFiles/test.dir/test.cpp.obj -o mytest -lSDL2
它运行得很好。如何强制 CMake 改用该参数顺序?
CMakeLists.txt 的内容:
cmake_minimum_required(VERSION 3.6)
project(mytest)
set(COMPILER_PATH "/usr/bin/")
set(CMAKE_MAKE_PROGRAM "make")
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lSDL2")
set(SOURCE_FILES test.cpp)
add_executable(mytest ${SOURCE_FILES})
【问题讨论】: