小编shi*_*oet的帖子

使用 clang 链接 C++ 模块 TS

我正在尝试将 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 会编译这些模块。所以据我所知,问题是在链接阶段。

有什么问题?

c++ clang c++-modules

0
推荐指数
1
解决办法
931
查看次数

标签 统计

c++ ×1

c++-modules ×1

clang ×1