我需要在想要在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 -llzmaCray wrapped编译器的情况也是如此:
$ 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 wrapped编译器来获得适当的MPI和巨型页面到我的程序中。
有没有什么我可以做的(除了尝试自己编译libxml2,参见my other question)来链接这个链接?
发布于 2018-03-19 03:30:45
如果确实安装了libxml2,那么看起来xml2-config是在骗你。我最好的猜测是libxml2的安装位置不同于它的构建位置,或者它在安装后被移动了。在任何情况下,xml2-config --libs的输出都假定在您的系统上,libxml2安装在默认库搜索路径中,liblzma和其他所需的库安装在默认库搜索路径或/lib64中(如果这还不在搜索路径中)。事实上,他们不是。
与其从头开始构建这些库,最好的办法是找到它们的实际安装位置,并在构建程序时将相应的-L选项传递给链接器:
cc test.c -L/path/to/libxml2/directory -lxml2 -lz -llzma -lm -ldlhttps://stackoverflow.com/questions/49347699
复制相似问题