静态链接的xerces 3.0.0在Linux上动态工作时不起作用

时间:2010-12-01 17:57:33

标签: c++ linux unix static-libraries xerces-c

所以我试图在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 ......而动态版本的工作正常,静态失败。

任何想法???

由于

2 个答案:

答案 0 :(得分:1)

xerces的动态版本将依赖于libpthread,以确保加载器能够获取正确的库。

在链接器命令行上指定libphtread应该修复那些未解析的外部,你是否(a)在命令行中放置正确的位置,因为顺序很重要;(b)你是否尝试了静态和动态版本的的libpthread?

答案 1 :(得分:0)

lib链接的顺序对链接器很重要,请尝试更改pthread lib的顺序。