MSVC2019 Отсутствуют имена символов из статической библиотеки

Я новичок в С++, пожалуйста, помогите мне, если кто-то может!

Я сделал бинарный объект bigint, который хорошо работает. Я скомпилировал его в статическую библиотеку и попытался включить в другую программу, но он не работает с такими ошибками:

комбинации.obj||ошибка LNK2019: неразрешенный внешний символ "public: static void __cdecl BinBigInt::bifactorial(class BinBigInt const &,class BinBigInt &)" (?bifactorial@BinBigInt@@SAXAEBV1@AEAV1@@Z), на который ссылается функция " без знака __int64 __cdecl combi::nonrepCombination(char,char,class std::basic_string,class std::allocator >)" (??$nonrepCombination@D@combi@@YA_KDDV?$basic_string@DU?$char_traits@D@std @@V?$allocator@D@2@@std@@@Z)|

Если я скопирую и вставлю два кода вместе, все будет работать хорошо, поэтому коды, похоже, в порядке.

Я читал много тем об ошибке LNK2019 и проверял настройки компилятора и соответствие версии Release vs. Debug и так далее, но ничего не помогло.

Наконец, я проверил символы в файле .lib вручную с помощью MS dumpbin, как предполагалось в какой-то теме, чтобы проверить проблемы с именами, но я обнаружил, что много (9) имен функций и все (7) внутренне определенные операторы действительно не содержатся в файл .lib. (компилятор только что выдал 5 неразрешенных ошибок внешнего символа, которые я действительно пытался использовать в файле реализации.)

Кажется, это не просто проблема с именами, я абсолютно не нашел эти имена символов с помощью dumpbin.

В то время как множество других функций, которые определены внутри объекта, и операторы (такие как Comparisson, побитовые и т. д.), которые определены вне объекта, содержатся в файле .lib.

Я использовал: dumpbin /symbols binbigint.lib | findstr "имя функции" во многих версиях, чтобы проверить их.

Я использую Code::Blocks с хостом MSVC2019 и нацелен на оба x64.

У кого-нибудь есть предположения, что может быть причиной того, что в библиотеке не было некоторых символов?

(Код библиотеки имеет длину около 3000 строк, поэтому я не копировал сюда...)


person froli78    schedule 17.12.2019    source источник
comment


Ответы (1)


Хорошо. Я нашел проблему...

Это был я... :(

Первоначально я написал все объявление и определение объекта внутри области объекта в файле .cpp. И это сработало хорошо. И я подумал, что будет достаточно удалить части реализации в заголовке, и я могу оставить весь код класса с заголовком класса в .cpp, и я забыл включить .h в .cpp, чтобы компилятор не генерировал ошибки об этом.

Тот факт, что он работает с копировальной пастой, поставил меня на правильный путь (это должно быть какая-то проблема с версией .h+.cpp) в конце.

Извините за беспокойство!

(Это был мой первый класс, который я пытаюсь использовать как .lib)

person froli78    schedule 17.12.2019