Cray上的libxml2无法使用

时间:2018-03-18 12:08:45

标签: c linker-errors cray

我需要在我想在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)以进行链接?

1 个答案:

答案 0 :(得分:1)

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

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

-L