【问题标题】:libxml2 on Cray not usableCray 上的 libxml2 不可用
【发布时间】:2018-03-19 03:30:45
【问题描述】:

我需要在我想在 Cray 机器上编译的项目中使用 libxml2。原则上它已安装,有一个xml2-config 程序给我链接器标志:

$ xml2-config --libs
-lxml2 -L/lib64 -lz -llzma -lm -ldl

我有一个非常简单的测试程序:

$ cat test.c
int main() { return 0; }

虽然原则上不需要,我可以用gcc test.c -lxml2 -L/lib64 -lz -llzma -lm -ldl 编译它就好了。但是,对于 Cray 编译器,它不起作用:

$ cc test.c -lxml2 -L/lib64 -lz -llzma -lm -ldl
/opt/cray/pe/cce/8.6.5/binutils/x86_64/x86_64-pc-linux-gnu/bin/ld: cannot find -lxml2
/opt/cray/pe/cce/8.6.5/binutils/x86_64/x86_64-pc-linux-gnu/bin/ld: cannot find -llzma

Cray 封装的英特尔编译器也是如此:

$ module swap PrgEnv-cray PrgEnv-intel

$ cc test.c -lxml2 -L/lib64 -lz -llzma -lm -ldl
ld: cannot find -lxml2
ld: cannot find -llzma

我需要使用 Cray 包装的编译器才能将正确的 MPI 和大页面放入我的程序中。

我能做些什么(除了尝试自己编译 libxml2,请参阅my other question)来获取此链接?

【问题讨论】:

    标签: c linker-errors cray


    【解决方案1】:

    如果确实安装了 libxml2,那么 xml2-config 似乎在骗你。我最好的猜测是 libxml2 安装在与构建它的位置不同的位置,或者它在安装后被移动。在任何情况下,xml2-config --libs 的输出假定在您的系统上,libxml2 安装在默认库搜索路径中,而 liblzma 和其他需要的库安装在默认库搜索路径或 /lib64 中(如果这是尚未在搜索路径中)。事实上,他们不是。

    与其从头开始构建库,最好的办法是找到它们的实际安装位​​置,并在构建程序时将相应的-L 选项传递给链接器:

    cc test.c -L/path/to/libxml2/directory -lxml2 -lz -llzma -lm -ldl
    

    【讨论】:

    • libxml2 通过系统上的 SUSE 包安装。这很可能是在 SUSE 服务器上使用 GCC 编译的。它安装在/usr/lib64/libxml2.so.2.9.4,带有适当的符号链接,没有尽可能多的版本号数字。我可以很好地使用 GCC。问题只是机器上的 Cray 包装的 Cray 和 Intel 编译器。
    • 您确定@MartinUeding,/usr/lib64 在您打包的编译器的库搜索路径中?您是否按照我的建议尝试使用 -L 选项指定它?或者另一方面,您是否确信安装在通常系统位置的库完全可以与您的包装编译器一起使用?如果包装编译器的工作方式与典型的交叉编译器相似,那么它们会故意完全忽略系统的标准库。
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2011-02-28
    • 2021-03-08
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多