所以我试图在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/