QT Creator CMakeLists.txt c ++链接错误

时间:2017-04-14 15:49:53

标签: c++ qt qt-creator

注意:我已从原始帖子更新此内容,以简化,澄清和反映我已尝试过的内容,包括采纳评论中的一些建议。

我正在运行QT Creator 4.2.1并尝试编译使用CMakeLists.txt定义的c ++项目。该程序使用project(example) cmake_minimum_required(VERSION 2.8) add_executable(example main.cpp) 从命令行编译好。我想在QT Creator IDE中工作。

我有两台Ubuntu机器。这个过程正常工作的地方,一个失败的地方。在它失败的机器上,如果我在QT中打开CMakeLists.txt作为项目并尝试编译,则无法编译许多链接器错误。我该如何解决这个问题?

以下是我尝试过的事情

  • 卸载并重新安装QT Creator
  • 卸载并重新安装build-essential
  • 在may makefile中包含各种lib路径
  • 在QT项目中启用和禁用系统环境变量
  • 更改QT套件以使用clang。这有效,但我会理解为什么gcc不起作用。

我正在努力寻找环境差异,但无法弄清楚导致问题的原因。

的main.cpp

08:42:09: Running steps for project example...
08:42:09: Starting: "/usr/bin/cmake" --build . --target all -- VERBOSE=1
/usr/bin/cmake -H/home/brian/example -B/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug/CMakeFiles /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug/CMakeFiles/progress.marks
/usr/bin/make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
/usr/bin/make -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/depend
make[2]: Entering directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
cd /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/brian/example /home/brian/example /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug /home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug/CMakeFiles/example.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
/usr/bin/make -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/build
make[2]: Entering directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
[ 50%] Building CXX object CMakeFiles/example.dir/main.cpp.o
/usr/bin/gcc     -g   -o CMakeFiles/example.dir/main.cpp.o -c /home/brian/example/main.cpp
[100%] Linking CXX executable example
/usr/bin/cmake -E cmake_link_script CMakeFiles/example.dir/link.txt --verbose=1
/usr/bin/gcc   -g   CMakeFiles/example.dir/main.cpp.o  -o example -rdynamic 
CMakeFiles/example.dir/main.cpp.o: In function `main':
/home/brian/example/main.cpp:6: undefined reference to `std::cout'
/home/brian/example/main.cpp:6: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/home/brian/example/main.cpp:6: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
CMakeFiles/example.dir/build.make:94: recipe for target 'example' failed
make[2]: Leaving directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/example.dir/all' failed
make[1]: Leaving directory '/home/brian/build-example-Desktop_Qt_5_8_0_GCC_64bit-Debug'
Makefile:83: recipe for target 'all' failed
/home/brian/example/main.cpp:6: undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
CMakeFiles/example.dir/main.cpp.o: In function `__static_initialization_and_destruction_0(int, int)':
/usr/include/c++/6/iostream:74: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/6/iostream:74: undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
make[2]: *** [example] Error 1
make[1]: *** [CMakeFiles/example.dir/all] Error 2
make: *** [all] Error 2
08:42:09: The process "/usr/bin/cmake" exited with code 2.
Error while building/deploying project example (kit: Desktop Qt 5.8.0 GCC 64bit)
When executing step "Make"
08:42:09: Elapsed time: 00:00.

的CMakeLists.txt

{{1}}

编译输出

{{1}}

2 个答案:

答案 0 :(得分:2)

看来您的QT Creator设置不正确。您正在项目中使用CMake构建系统,该系统使用各种环境变量(此处有用的列表和说明:https://cmake.org/Wiki/CMake_Useful_Variables)。

当您在QTCreator设置中设置编译器(或者可能在安装期间自动完成,以前的版本忘记配置文件等)时(例如,请参见此处Qt Creator use another GCC Version located in another Place),您的项目的环境变量将根据QTCreator设置。这可能是您直接编译项目时遇到的差异。将其重置为正确的编译器路径(例如/ usr / bin / g ++)。

您可以添加所有CMake变量的输出(例如,参见本方法CMAKE: Print out all accessible variables in a script)并尝试手动编译项目并在QTCreator中编译。从你得到的输出,差异应该是显而易见的。我会注意CMAKE_CXX_COMPILER变量。

答案 1 :(得分:0)

此错误表示您未将标准库链接到可执行文件。

尝试添加到CMakeLists.txt

TARGET_LINK_LIBRARIES(example stdc++)

没试过,所以这可能看起来有点不同。只需谷歌如何将标准c ++库链接到目标。