Импорт модуля Visual Studio C++ 20 .h&.cpp lib

lib1 имеет два файла

математика.ч

inline void hello();

и math.cpp

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

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

lib2 — это библиотека модулей С++ 2a:

export module Bar;

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

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

Компилятор Visual Studio 16.8.0 скажет: (Bar.ixx.obj): ошибка LNK2001: неразрешенный внешний символ void __cdecl hello (void) (?hello@@YAXXZ)


person bitnick    schedule 11.11.2020    source источник


Ответы (2)


математика.ч

inline void hello();

to

void hello();

работает.

person bitnick    schedule 12.11.2020
comment
Я рад, что у вас есть решение, и спасибо, что поделились, я был бы признателен, если бы вы отметили их как ответ, и это будет полезно для другого сообщества. - person Barrnet Chou; 18.11.2020

Учитывая текущую информацию, боюсь, что не смогу определить причину проблемы. Итак, я предлагаю вам использовать DUMPBIN, чтобы помочь вам найти причину.

/EXPORTS и /SYMBOLS DUMPBIN инструмент командной строки полезен здесь. Они могут помочь вам узнать, какие символы определены в вашей .dll и объектных или библиотечных файлах. Вы можете использовать список символов, чтобы убедиться, что экспортированные оформленные имена соответствуют оформленным именам, которые ищет компоновщик.

В некоторых случаях компоновщик может сообщить только оформленное имя символа. Вы можете использовать инструмент командной строки UNDNAME, чтобы получить недекорированную форму декорированного имени.

person Barrnet Chou    schedule 12.11.2020
comment
добавлен. Не работает. Это головной блок или что-то в этом роде? - person bitnick; 12.11.2020
comment
Я предлагаю вам использовать DUMPBIN. Надеюсь, это поможет вам. - person Barrnet Chou; 12.11.2020