首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在启用g++、模块的情况下成功地编译任何内容?

如何在启用g++、模块的情况下成功地编译任何内容?
EN

Stack Overflow用户
提问于 2022-05-01 11:50:20
回答 1查看 302关注 0票数 4

我有以下文件: Testing2.cpp:

代码语言:javascript
复制
#include <string>
#include <iostream>

int main() {
    std::string ss = "aaaa";
    ss += "aa";
    std::cout << ss << "\n";
}

当我像这样编译它:g++-11 -o Testing2 Testing2.cpp -std=c++20时,我得到了想要的输出。当我像这样编译它:g++-11 -o Testing2 Testing2.cpp -std=c++20 -fmodules-ts时,我会得到一个运行时段错误。

问题1:这是g++中的一个bug,还是我遗漏了什么?

我有几个类似的问题,一个与std::filesystem有关,一个与std::map有关。即使没有实际使用模块,代码也不能正常工作。

问题2:上面的代码甚至不使用模块。为什么g++在启用-fmodules ts``时与未启用时编译它的方式不同?

任何见解都是受欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-02 07:37:19

事实证明,g++将使用预编译的标准库模块,如果可用的话(位于gcm.cache文件夹中),在这两种情况下:#include <string>import <string>;

通过从gcm.cache目录中删除string和iostream模块并重新编译它们,解决了我的问题(我使用了命令g++-11 -std=c++20 -fmodules-ts -c -x c++-system-header string)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72076421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档