Expat未解析的外部符号

时间:2013-03-11 22:26:40

标签: c++ linker-errors unresolved-external xmp

在找到一个共享库(它是一个firefox xpcom组件)中的静态库(包含带有expat的XMP)时,我发现为什么我有未解析的外部符号时遇到了麻烦。

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

静态库是来自Adobe XMP SDK的XMPCore库:构建它没有问题(expat的源代码作为第三方库的一部分包含在内)

在构建我的xpcom模块时,我已经在链接阶段得到了这个:

  

symbole externenonré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
...

包含了这些功能的实现,因此我需要提示:有人可以帮我解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

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