1

是否可以通过共享库公开 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
4

0 回答 0