LNK2001
От: s_aa Россия  
Дата: 24.01.25 08:21
Оценка:
Если что, я не плюсист. Было свободное время решил вспомнить язык и наваять простую DLL, которая в свою очередь используется доступную библиотеку podofo (работа с PDF). Когда подключаю podofo.lib в виде библиотеки импорта то все компилируется. А если делаю статическую podofo.lib, выскакивают ошибки линковки вида:

неразрешенный внешний символ "__declspec(dllimport) private: virtual void __cdecl PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ). PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ).


Ругается на private и protected члены импортируемого класса PoDoFo::PdfMemDocument. Их же вроде вообще не должно быть видно извне? Я чего то не догоняю. Ткните куда копать.
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re: LNK2001
От: vopl Россия  
Дата: 24.01.25 08:42
Оценка: 6 (1) +1
Здравствуйте, s_aa, Вы писали:

_>Если что, я не плюсист. Было свободное время решил вспомнить язык и наваять простую DLL, которая в свою очередь используется доступную библиотеку podofo (работа с PDF). Когда подключаю podofo.lib в виде библиотеки импорта то все компилируется. А если делаю статическую podofo.lib, выскакивают ошибки линковки вида:

_>

_>неразрешенный внешний символ "__declspec(dllimport) private: virtual void __cdecl PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ). PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ).


_>Ругается на private и protected члены импортируемого класса PoDoFo::PdfMemDocument. Их же вроде вообще не должно быть видно извне? Я чего то не догоняю. Ткните куда копать.


В имени неразрешенного символа есть префикс __imp_, указывающий на то что твои исходники пользуют АПИ PoDoFo в динамическом режиме а не в статическом. Вероятно, ты не определил какой ни будь настроечный макрос, что ни будь типа PDOFO_STATIC_LINK.. Покури это, наверняка поможет.
Re: LNK2001
От: qaz77  
Дата: 24.01.25 10:48
Оценка: 6 (1) :)
Здравствуйте, s_aa, Вы писали:

_>Если что, я не плюсист. Было свободное время решил вспомнить язык и наваять простую DLL, которая в свою очередь используется доступную библиотеку podofo (работа с PDF). Когда подключаю podofo.lib в виде библиотеки импорта то все компилируется. А если делаю статическую podofo.lib, выскакивают ошибки линковки вида:

_>

_>неразрешенный внешний символ "__declspec(dllimport) private: virtual void __cdecl PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ). PoDoFo::PdfMemDocument::reset(void)" (__imp_?reset@PdfMemDocument@PoDoFo@@EEAAXXZ).


Для сборки статической библиотеки не должно быть __declspec(dllimport).
Там класс объявляется как-то так:
class PODOFO_DECLSPEC PdfMemDocument { ... };

При сборке в видe dll будет:
#define PODOFO_DECLSPEC __declspec(dllimport)

а для статической либы должно быть:
#define PODOFO_DECLSPEC
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.