共享库中的 Clang C++20 模块

问题描述

是否可以通过共享库暴露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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...