代码之家  ›  专栏  ›  技术社区  ›  Tom

Xerces-C 2.8:加载共享库时出错

  •  2
  • Tom  · 技术社区  · 15 年前

    我正试图编译一个在RedHatLinux上的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;
    }
    

    编译如下:

    G++Test.CPP -l./xml/xerces-c_2_8_0/lib-l xerces-c-i./xml/xerces-c_2_8_0/包括

    令人惊讶的是,文件确实存在:

    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
    

    有什么想法吗?我觉得我错过了什么,但不知道是什么。

    事先谢谢。

    3 回复  |  直到 11 年前
        1
  •  6
  •   catwalk    15 年前

    运行 ldd a.out 看看链接器是否能解析正确的.so文件

    出口 LD_LIBRARY_PATH 要包括当前文件夹(以与路径变量相同的方式),请再次检查ldd

        2
  •  0
  •   Nadir SOUALEM    15 年前

    做你想做的事情的好方法是:

    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选项允许您使用特定的链接选项,您不需要修改 LDL图书馆路径

        3
  •  0
  •   IanNorton    15 年前

    您需要告诉运行时C库在哪里可以找到各种符号,这些符号不是在代码中静态编译的,也不是在通常的/lib和/usr/lib位置。

    通过将共享库的路径添加到ld_library_path,可以做到这一点。在这种情况下,这将是您为编译器的-l参数所做的操作。