我试图编译在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参数编译器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top