gpt4 book ai didi

mingw/libxml2 问题

转载 作者:行者123 更新时间:2023-12-04 17:36:51 26 4
gpt4 key购买 nike

我正在尝试在 win7 下将 libxml2 (v2.2.6.0) 与 mingw 一起使用
我添加了 lib -llibmlx2,但每次编译时我都会得到:

error: undefined reference to `_imp__xmlFree'

在谷歌上我发现了这个:
http://osdir.com/ml/gnome.lib.xml.ge.../msg00003.html
但仍然不起作用。

任何想法 ?

谢谢...

最佳答案

我相信这个问题只会在使用 Igor Zlatovic 准备的预编译 libxml2 二进制文件时发生。我怀疑如果使用使用 mingw 本地编译的 libxml2 lib,问题就会消失。

这是 libxml/globals.h 中 xmlFree 的声明:

#else /* !LIBXML_THREAD_ALLOC_ENABLED */
XMLPUBVAR xmlMallocFunc xmlMalloc;
XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
XMLPUBVAR xmlReallocFunc xmlRealloc;
XMLPUBVAR xmlFreeFunc xmlFree;
XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
#endif /* LIBXML_THREAD_ALLOC_ENABLED */

并且 XMLPUBVAR 被扩展为
#define XMLPUBVAR __declspec(dllimport) extern

来自 libxml/xmlexports.h

第一次观察。 xmlFree 不是函数而是变量。这是一个异常(exception)情况,因为几乎所有其他 libxml2 函数都是真正的导出函数。这就解释了为什么 xmlFree() 是人们遇到的唯一有问题的函数。

mingw 编译器将导入的符号名称从 xmlFree 更改为 libxml2.lib 中未找到的 _imp__xmlFree。我猜测对于其他编译器(例如 MSVC),链接器正在搜索在 libxml2.lib 中找到的正确符号 _xmlFree:
C:\MinGW\msys\1.0\home\100517891\embedded\ext\libxml2\lib>"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe" /exports libxml2.lib | grep xmlFree
_xmlFree
_xmlFreeAttributeTable
_xmlFreeAutomata
_xmlFreeCatalog
_xmlFreeDoc
_xmlFreeDocElementContent
_xmlFreeDtd
_xmlFreeElementContent
_xmlFreeElementTable
_xmlFreeEntitiesTable
_xmlFreeEnumeration
_xmlFreeIDTable
_xmlFreeInputStream
_xmlFreeMutex
_xmlFreeNode
_xmlFreeNodeList
_xmlFreeNotationTable
_xmlFreeNs
_xmlFreeNsList
_xmlFreeParserCtxt
_xmlFreeParserInputBuffer
_xmlFreePattern
_xmlFreePatternList
_xmlFreeProp
_xmlFreePropList
_xmlFreeRMutex
_xmlFreeRefTable
_xmlFreeStreamCtxt
_xmlFreeTextReader
_xmlFreeTextWriter
_xmlFreeURI
_xmlFreeValidCtxt

我还没有找到任何方法来修复链接错误,但解决这个问题的一种简单而安全的方法是承认 xmlFree 是一个简单的函数指针变量,它被初始化为 globals.c 中标准 free() 函数的地址和更改该分配的唯一方法是使用一些调试开关重新编译 dll。

随意将调用 xmlFree() 替换为调用 free()。一切都应该没问题,链接错误就会消失。

关于mingw/libxml2 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com