1

在共享库(它是一个 firefox xpcom 组件)中链接静态库(包含 expat 的 XMP)时,我很难找到为什么我有未解析的外部符号。

我在使用 Windows 编译器(标志:“-Od -MDd”)和 mozilla-firefox 14 的 Windows 下。

静态库是来自 Adob​​e XMP 的 SDK 的 XMPCore 库:构建它没有问题(expat 的源代码包含在第三方库中)

在构建我的 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

所以我认为我的 XMP 的静态构建中缺少来自 expat 的那些函数,所以我使用 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
...

包括这些功能的实现,所以我需要提示:有人可以帮我吗?

谢谢 !

4

1 回答 1

4

我发现了我的错误:Adobe XMP SDK 的自述文件不完整,因为如果您想使用 expat (-DXML_STATIC) 构建静态库,他们忘记在编译阶段定义 XML_STATIC。希望它可以帮助其他有同样问题的人

于 2013-03-12T09:20:26.577 回答