如何使用C++20模块创建共享库,并在同一解决方案的不同项目中使用它?[duplicate]

kyks70gy  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(142)
    • 此问题在此处已有答案**:

Will c++1z modules replace the need for dllimport dllexport on windows(3个答案)
昨天关门了。
我有一个名为Almond的解决方案,其中包含两个项目:

  • 杏仁
  • 沙盒

Almond是一个使用C20模块创建的共享库。Sandbox应该是一个在运行时链接到Almond的可执行文件(也是为C20配置的)。我在Sandbox中添加了almond作为引用。看起来我应该能够从库中导入模块,甚至可以获得智能感知。我是否也必须做__declspec(dllexport)__declspec(dllimport)之类的事情?如果是,怎么会?我找不到任何能解释这个的文件。
杏仁色:src/Lib.ixx

export module Lib;

export int Three() {
    return 3;
}

沙盒:src/Main.cpp

import Lib;

import <iostream>;

int main() {
    std::cout << Three() << std::endl;
}

Almond构建得很好,但构建沙箱时出现以下错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C2065   'endl': undeclared identifier   Sandbox C:\source\Almond\Sandbox\src\Main.cpp   6   
Error   C2230   could not find module 'Lib' Sandbox C:\source\Almond\Sandbox\src\Main.cpp   1   
Error   C7612   could not find header unit for 'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\include\iostream' Sandbox C:\source\Almond\Sandbox\src\Main.cpp   3   
Error   C2039   'cout': is not a member of 'std'    Sandbox C:\source\Almond\Sandbox\src\Main.cpp   6   
Error   C2065   'cout': undeclared identifier   Sandbox C:\source\Almond\Sandbox\src\Main.cpp   6   
Error   C3861   'Three': identifier not found   Sandbox C:\source\Almond\Sandbox\src\Main.cpp   6   
Error   C2039   'endl': is not a member of 'std'    Sandbox C:\source\Almond\Sandbox\src\Main.cpp   6
9jyewag0

9jyewag01#

我不知道你想做什么,但尝试使用名称空间,而不是模块,它更简单,在我看来。
名称空间本质上是std这样的模块,它们包含x::y可以访问的成员(类、变量或函数):
杏仁h:

namespace Almond{

    int Three(){return 3;}
}

沙盒h:

#include "Almond.h"
#include <iostream>

using namespace Almond; // optional

int main(){
    std::cout << Three() << std::endl;
}

我们使用在Almond.h文件中声明的名称空间Almond,然后就可以使用它的所有成员了!

相关问题