我正在尝试将 C++ 模块 TS 与 clang 一起使用。
我创建了两个文件:
// foo.cppm
export module foo;
export void test() {
}
Run Code Online (Sandbox Code Playgroud)
和
// bar.cpp
import foo;
int main() {
test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我foo.cppm用这个命令编译
clang++ --std=c++17 -fmodules-ts --precompile foo.cppm -o foo.pcm
Run Code Online (Sandbox Code Playgroud)
它编译没有错误并创建一个foo.pcm文件,但是当我尝试使用此命令编译二进制文件时:
clang++ --std=c++17 -fmodules-ts -fprebuilt-module-path=. -fmodule-file=foo.pcm bar.cpp
Run Code Online (Sandbox Code Playgroud)
它打印一个错误:
/tmp/bar-f69a1f.o: In function `main':
bar.cpp:(.text+0x10): undefined reference to `test()'
Run Code Online (Sandbox Code Playgroud)
我用 clang 7 trunk 和 clang 6 尝试过。我也尝试了不同的std选项和这个命令:
clang++ --std=c++17 -fmodules-ts -fmodule-file=foo.pcm bar.cpp -o bar
Run Code Online (Sandbox Code Playgroud)
没有任何帮助。
有趣的是,如果一个模块使用其他模块的符号,clang 会编译这些模块。所以据我所知,问题是在链接阶段。
有什么问题?