Clang和libc++版本:15.0.7
来源
as.cppm:
export module as;
import <boost/asio.hpp>;
// import <iostream>;
export int main() {
}
字符串
编译
(需要boost库)
clang++ -std=c++20 -stdlib=libc++ --precompile -xc++-system-header boost/asio.hpp
#Produces `asio.pcm`
clang++ -std=c++20 -stdlib=libc++ --precompile as.cppm -fmodule-file=asio.pcm
#Produces `as.pcm`
型
一切都运行良好
但是如果我取消第3行的注解
来源:
as.cppm:
export module as;
import <boost/asio.hpp>;
import <iostream>;
export int main() {
}
型
编译
(需要boost库)
clang++ -std=c++20 -stdlib=libc++ --precompile -xc++-system-header boost/asio.hpp
#Produces `asio.pcm`
clang++ -std=c++20 -stdlib=libc++ --precompile -xc++-system-header iostream
#Produces `iostream.pcm`
clang++ -std=c++20 -stdlib=libc++ --precompile as.cppm -fmodule-file=asio.pcm -fmodule-file=iostream.pcm
#Error
型
错误
pastebin
为什么它会产生这样的错误信息?我在谷歌上找不到类似的信息。
g++ 12.2在同一代码上产生 * 内部编译器错误 *
1条答案
按热度按时间wh6knrhe1#
我遇到过和你类似的问题。
在我的示例中,我将
<format>
和<iostream>
一起导入。字符串
由于
<format>
和<iostream>
都直接或间接地包含<string_view>
,因此单独生成format.pcm
和iostream.pcm
可能会混淆依赖关系,从而导致在解析import <format>;
和import <iostream>;
时出现ODR检查和声明合并问题。(请参阅官方文档)临时解决方法可能是先生成
string_view.pcm
,然后基于string_view.pcm
生成format.pcm
和iostream.pcm
。型
在您的情况下,可以先生成
stdexcept.pcm
,然后基于stdexcept.pcm
生成asio.pcm
和iostream.pcm
。请记住,在编译器有稳定的支援之前,不要在实际执行环境中使用这个功能。您也可以尝试使用
Standard Library Modules
功能,这个功能会方便得多-只需要一个import std;
陈述式。