我需要在我想在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)以进行链接?
答案 0 :(得分:1)
如果确实安装了libxml2,那么xml2-config
似乎在骗你。我最好的猜测是libxml2安装在与其构建不同的位置,或者安装后移动了。在任何情况下,xml2-config --libs
的输出都假定在您的系统上,libxml2安装在默认库搜索路径中,liblzma和其他所需的库安装在默认库搜索路径或{{1}中(如果那不在搜索路径中)。事实上,他们不是。
不是从头开始构建库,最好的办法是找到它们实际安装的位置,并在构建程序时将相应的/lib64
选项传递给链接器:
-L