问题描述
是否可以通过共享库暴露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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)