是否可以通过共享库公开 C++ 模块?
我意识到这是最前沿(2021 年 1 月),但我仍然敢于问是否有人知道如何通过共享库完成暴露模块。
这是生成文件:
CPP=clang++-11 -std=c++20 -stdlib=libc++ -fms-extensions
MOD_EXP=-fmodules-ts --precompile -x c++-module
MOD_IMP=-fmodules-ts -fprebuilt-module-path=.
USE_STD_MOD=-fimplicit-modules -fimplicit-module-maps
DLL_EXP=-fvisibility=default
main: main.cpp mathlib
$(CPP) $(DLL_EXP) $(USE_STD_MOD) $< -o $@ libmathlib.so -Wl,-rpath,./
mathlib: addlib.cpp sublib.cpp
$(CPP) $(MOD_EXP) $^
$(CPP) $(DLL_EXP) -shared *.pcm -o libmathlib.so
clean:
rm -f *.pcm *.so main
代码和我想象的一样简单:
// addlib.cpp
export module addlib;
export __attribute__((visibility("default"))) int add(int a, int b)
{
return a + b;
}
代码文件“sublib.cpp”有一个相应的函数,可以从 a 中减去 b。
和主文件:
import addlib;
import sublib;
import <iostream>;
int main()
{
std::cout << "3 + 5 = "
<< add(3, 5) << "\n";
std::cout << "8 - 2 = "
<< sub(8, 2) << "\n";
return 0;
}
我故意$(MOD_IMP)
从编译命令中删除来构建 main,因为我只想依赖于共享库。但是,我收到此编译器错误
main.cpp:1:8: fatal error: module 'addlib' not found