的xerces-C 2.8:错误而载入共享库
题
我试图编译在Red Hat Linux上的HP-UX服务器上运行的程序。
它使用的xerces-C库来解析XML文件。编译是好的,但是当我尝试运行它,我得到以下信息
./ a.out的:错误而载入共享 库:libxerces-c.so.28:不能 打开共享对象文件:没有这样的文件 或目录
我写了一个非常简单的程序,试图了解怎么回事:
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
int main(int argc, char* argv[])
{
return 0;
}
和编译它是这样的:
克++ TEST.CPP -L./xml/xerces-c_2_8_0/lib -lxerces-C -I./xml/xerces-c_2_8_0/include
令人惊讶的是文件是实际上有:
lib]$ ls
libxerces-c.a libxerces-c.so.28 libxerces-depdom.a libxerces-depdom.so.28
libxerces-c.so libxerces-c.so.28.0 libxerces-depdom.so libxerces-depdom.so.28.0
任何想法?我觉得我失去了一些东西,但不知道是什么。
预先感谢。
解决方案
运行ldd a.out
,看看接头可以解决.so文件右
出口LD_LIBRARY_PATH
以包括当前文件夹(在相同的方式PATH变量),并检查LDD再次
其他提示
做你想要的好方法是以下之一:
g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
或
g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
Xlinker或WL选项允许你使用特定的连接选项,你不需要modifiy LD_LIBRARY_PATH
您需要告诉运行时C库在哪里可以找到的arent在你的代码静态编译,并在usualy / lib和/ usr / lib目录位置的arent的各种符号。
您可以通过添加路径到您的共享库LD_LIBRARY_PATH做到这一点。在这种情况下,这将是你一直把什么-l参数编译器。
不隶属于 StackOverflow