C++20模块预编译时提示module 'K' not found错误如何解决?
错误原因
- Clang 12的C++模块实现不会自动扫描当前目录下的预编译模块(.pcm)文件,编译
foo.cppm时引入K模块,编译器无法定位到已经生成的K.pcm文件,因此触发模块找不到的报错。 - Clang 12对C++20模块的支持处于实验阶段,默认不会主动检索工作目录下的预构建模块文件,需要用户显式告知依赖关系或模块搜索路径。
解决方法
方法1:预编译时直接传入依赖的模块文件
执行预编译foo.cppm的命令时,直接把已经生成的K.pcm作为输入参数传入即可,命令如下:
clang++ -fmodules-ts -std=c++20 --precompile foo.cppm K.pcm -o M.pcm
方法2:指定预编译模块搜索路径
通过-fprebuilt-module-path参数指定预编译模块所在的目录(示例中为当前目录.),命令如下:
clang++ -fmodules-ts -std=c++20 --precompile foo.cppm -fprebuilt-module-path=. -o M.pcm
后续完整编译链接参考
如果需要生成最终可执行文件,可以按以下步骤操作:
- 编译所有预编译模块为目标文件
clang++ -fmodules-ts -std=c++20 -c K.pcm -o K.o clang++ -fmodules-ts -std=c++20 -c M.pcm -o M.o
- 编译主程序文件为目标文件
clang++ -fmodules-ts -std=c++20 -c bar.cpp -fprebuilt-module-path=. -o bar.o
- 链接所有目标文件生成可执行程序
clang++ *.o -o test
内容的提问来源于stack exchange,提问作者ilich
相关产品推荐
相关产品推荐

