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