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

有任何想法吗???

谢谢

最佳答案

xerces的动态版本将依赖libpthread,以确保加载程序将选择正确的库。

在链接器命令行上指定libphtread应该可以修复那些无法解析的外部组件,您是否(a)依顺序将其放在命令行的正确位置,并且(b)是否尝试了libpthread的静态和动态版本?

关于c++ - 静态链接的xerces 3.0.0在Linux上动态工作时不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4327421/

10-12 17:24