所以我试图在Linux上静态链接Xerces 3.0.0。
我已经使用动态链接完成了它并且它可以工作,但为了避免依赖,我想静态地执行它。
我更改了所有的make文件以适当的方式执行
-Wl,-Bstatic ... -lxerces-c -Wl,-Bdynamic ...
但我收到以下错误:
undefined reference to '__ctype_b'
undefined reference to '__ctype_tolower'
undefined reference to '__ctype_toupper'
我用蛮力方法找到了here
但是还有另一种与xerces相关的错误。
Xerces/3.0.0/lib/libxerces-c.a(PosixMutexMgr.o):
In function `xercesc_3_0::PosixMutexMgr::create(xercesc_3_0::MemoryManager*)':
PosixMutexMgr.cpp:(.text+0x84): undefined reference to `pthread_mutexattr_init'
PosixMutexMgr.cpp:(.text+0x95): undefined reference to `pthread_mutexattr_settype'
PosixMutexMgr.cpp:(.text+0xad): undefined reference to `pthread_mutexattr_destroy'
PosixMutexMgr.cpp:(.text+0xd0): undefined reference to `pthread_mutexattr_destroy'
它似乎缺少pthread,所以我尝试添加它,但这不能解决问题... 这些错误来自Xerces ......而动态版本的工作正常,静态失败。
任何想法???
由于
答案 0 :(得分:1)
xerces的动态版本将依赖于libpthread,以确保加载器能够获取正确的库。
在链接器命令行上指定libphtread应该修复那些未解析的外部,你是否(a)在命令行中放置正确的位置,因为顺序很重要;(b)你是否尝试了静态和动态版本的的libpthread?
答案 1 :(得分:0)
lib链接的顺序对链接器很重要,请尝试更改pthread lib的顺序。