CMake 能编译但运行/调试异常的问题及解决方法

10 篇文章 0 订阅

问题描述

在windows系统下使用 CMake + MSYS2进行C++开发,但在源码main.cpp中增加C++11以上的语法后, 使用cmake 编译, 能够生成可执行文件, 但运行和调试时不显示任何输出结果.
源码如下:

#include <iostream>
#include <vector>

int main(int, char**) {
    std::vector<int> v{1,2,3}; // 列表初始化, C++11支持的语法
    for (auto &&i : v) // ranged-for, C++11支持的语法
    {
        std::cout << i << std::endl;
    }
    
    std::cout << "Hello, world!\n";
}

一开始以为是未指定C++版本的缘故, 但在CMakeLists.txt中添加如下内容, 未能解决问题.

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

后来发现, 是因为电脑上安装了两个 gcc/g++, 一个为C:\Strawberry\c\bin\g++.exe(4.9.2) (以前安装perl时安装的), 另一个为C:\msys64\mingw64\bin\g++.exe(11.2.0), 且低版本的gcc/g++在前.
运行如下命令, 查看g++的所在的位置和顺序:

where g++

运行如下命令, 查看默认g++的版本:

g++ --version 

解决方法

编辑系统变量和用户变量中PATH, 将高版本 gcc/g++的路径移动至低版本之前.
在这里插入图片描述
使用CMake重新编译后,能够正常运行. 运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

falwat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值