【问题标题】:Visual studio C++ 20 module import .h&.cpp libVisual Studio C++ 20 模块导入 .h&.cpp 库
【发布时间】:2021-02-23 23:15:36
【问题描述】:

lib1 有两个文件

数学.h

inline void hello();

和数学.cpp

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

void hello() {
    std::cout << "hello from math";
}

lib2 是一个 c++ 2a 模块库:

export module Bar;

import "math.h";
import std.core;

export namespace bar {
    void BarFunc() { 
        hello();
    }
}

视觉工作室 16.8.0 编译器会说:(Bar.ixx.obj) : error LNK2001: unresolved external symbol "void __cdecl hello(void)" (?hello@@YAXXZ)

【问题讨论】:

    标签: c++ visual-studio module header-files c++20


    【解决方案1】:

    数学.h

    inline void hello();
    

    void hello();
    

    有效。

    【讨论】:

    • 很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。
    【解决方案2】:

    鉴于目前的信息,恐怕我无法确定问题的原因。所以,我建议你可以使用DUMPBIN来帮助你找到原因。

    DUMPBIN 命令行工具的/EXPORTS/SYMBOLS 选项是 在这里有用。它们可以帮助您发现哪些符号在 您的 .dll 和对象或库文件。您可以使用符号列表 验证导出的修饰名称是否与修饰名称匹配 链接器搜索。

    在某些情况下,链接器只能报告修饰名称 象征。您可以使用 UNDNAME 命令行工具来获取 修饰名称的未修饰形式。

    【讨论】:

    • 已添加。不工作。这是标题单元还是什么?
    • 我建议你可以使用DUMPBIN。希望对您有所帮助。
    猜你喜欢
    • 2021-11-06
    • 2020-10-07
    • 2021-02-24
    • 2021-08-11
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多