【问题标题】:CLion: build program won't run in cmdCLion:构建程序不会在 cmd 中运行
【发布时间】:2019-03-24 08:34:03
【问题描述】:

当我尝试在Code::Blocks IDE 中运行我的 C++ 项目时,它会在 Windows CMD 中运行程序而没有任何问题。如果我尝试通过资源管理器运行程序,它也会在 CMD 中运行,没有任何问题。

但是,如果我尝试通过 CLion 运行完全相同的程序,它会在 CLion 本身中运行良好(CLion 具有内置终端,而 Code::Blocks 使用 Windows CMD)。但是如果我尝试通过资源管理器运行程序,我会收到这个奇怪的错误:

如果我按确定:

谁知道问题出在哪里?我该如何解决这个问题?

更多信息: Code::BlocksMinGW 打包在一起。使用CLion,我不得不手动下载工具链。我下载并安装了MinGW-w64,因为我什么都不知道,这也是 Code::Blocks 使用的。

奇怪的是,MinGW-w64 安装在“Program Files (x86)”中,而不是“Program Files”中。

【问题讨论】:

  • 好像MinGWbin(或lib)目录不在%PATH%中。
  • 你的程序并不独立于整个世界。您的程序需要编译器的运行时库对其可见才能运行。这是因为您使用共享运行时设置编译程序。所以,要解决这个问题,要么按照一些程序员老兄所说的,将 gcc 的 bin 目录添加到环境变量 %PATH% 中,要么在静态运行时设置中编译。
  • @TheQuantumPhysicist 我希望程序可以在任何计算机上运行,​​而无需安装 MinGW。如何在 CLion 中“在静态运行时设置中编译”?抱歉问我只是个学生。
  • @ilivss 你让我想起了我很小的时候……就像 18 年前一样。我在使用 Visual C++ 6 时遇到了同样的问题。无论如何,我认为将标志 -static 添加到您的编译命令中应该可以做到。阅读有关在 MinGW 中与运行时库进行静态链接的更多信息,以了解更多信息。

标签: c++ codeblocks c++17 clion mingw-w64


【解决方案1】:

将以下内容添加到 CLion 中的 CMakeLists.txt 文件中:

set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-static")

这适用于 mingw 所基于的 gcc。对于其他链接器,您必须搜索其特定的静态链接开关。

【讨论】:

  • 我有一个问题:你的代码和set(CMAKE_EXE_LINKER_FLAGS "-static")有什么区别?额外的${CMAKE_EXE_LINKER_FLAGS} 有什么作用?两条线都适合我。
  • 问题下的所有cmet都是准确的。如果您还在项目中创建库,则可以添加额外的行来静态链接库:set(BUILD_SHARED_LIBS OFF),正如@dude 对stackoverflow.com/questions/24648357/… 的引用所解释的那样。
  • 添加了 ${CMAKE_EXE_LINKER_FLAGS} 以确保新行不会修改当前的链接器标志。这将旧的链接器标志与新标志连接起来。
  • 感谢您的解释。我现在明白了。
猜你喜欢
  • 2014-09-13
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
相关资源
最近更新 更多