У меня проблемы с поиском, почему у меня есть неразрешенный внешний символ при связывании статической библиотеки (XMP с включенным экспатом) в общую библиотеку (это компонент firefox xpcom).
Я под Windows, используя компилятор Windows (флаг: «-Od -MDd») и Mozilla-Firefox 14.
Статическая библиотека — это библиотека XMPCore из пакета SDK для Adobe XMP: ее создание без проблем (исходный код экспата включен в состав сторонней библиотеки)
При создании моего модуля xpcom, я получил это на этапе связывания:
symbole externe non résolu означает неразрешенный внешний символ!
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetCommentHandler référencé dans la fonction "public: __thiscall
ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetProcessingInstructionHandler référencé dans la fonction "publi
c: __thiscall ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetCdataSectionHandler référencé dans la fonction "public: __this
call ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetCharacterDataHandler référencé dans la fonction "public: __thi
scall ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetElementHandler référencé dans la fonction "public: __thiscall
ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetNamespaceDeclHandler référencé dans la fonction "public: __thi
scall ExpatAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_SetUserData référencé dans la fonction "public: __thiscall ExpatA
dapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_ParserCreateNS référencé dans la fonction "public: __thiscall Exp
atAdapter::ExpatAdapter(bool)" (??0ExpatAdapter@@QAE@_N@Z)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_ParserFree référencé dans la fonction "public: virtual __thiscall
ExpatAdapter::~ExpatAdapter(void)" (??1ExpatAdapter@@UAE@XZ)
xmpcore.lib(ExpatAdapter.obj) : error LNK2019: symbole externe non résolu __imp__XML_Parse référencé dans la fonction "public: virtual void __thiscall
ExpatAdapter::ParseBuffer(void const *,unsigned int,bool)" (?ParseBuffer@ExpatAdapter@@UAEXPBXI_N@Z)
xmp.dll : fatal error LNK1120: 10 externes non résolus
Поэтому я подумал, что эти функции из expat отсутствуют в статической сборке моего XMP, поэтому я проверил, используя objdump -t, чтобы вывести список символов, которые я нашел:
../third-party/expat/lib/xmlparse.obj: file format pe-i386
SYMBOL TABLE:
...
[109](sec 5)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000ff0 _XML_SetCommentHandler
...
../XMPCore/source/ExpatAdapter.obj: file format pe-i386
SYMBOL TABLE:
...
[251](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __imp__XML_SetCommentHandler
...
Реализация этих функций включена, поэтому мне нужны подсказки: Может ли кто-нибудь помочь мне с этим?
Спасибо !
Я обнаружил свою ошибку: файл readme из SDK Adobe XMP не был завершен, потому что они забыли сказать определить XML_STATIC на этапе компиляции, если вы хотите создать статическую библиотеку с использованием expat (-DXML_STATIC). Надеюсь, что это может помочь другим с теми же проблемами
Других решений пока нет …