在共享库(它是一个 firefox xpcom 组件)中链接静态库(包含 expat 的 XMP)时,我很难找到为什么我有未解析的外部符号。
我在使用 Windows 编译器(标志:“-Od -MDd”)和 mozilla-firefox 14 的 Windows 下。
静态库是来自 Adobe 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
...
包括这些功能的实现,所以我需要提示:有人可以帮我吗?
谢谢 !