我正在尝试用帕迪索编译一个线性系统求解器。测试用例(pardiso_sym.c)也是从上面的同一个网站下载的。
目录中有以下文件:
[gv@emerald my-pardiso]$ ls -lh
total 1.3M
-rw-r--r-- 1 gv hgc0746 1.3M Aug 7 11:59 libpardiso_GNU_IA64.so
-rw-r--r-- 1 gv hgc0746 7.2K Nov 13 2007 pardiso_sym.c然后,我尝试使用以下命令编译它:
[gv@emerald my-pardiso]$ gcc pardiso_sym.c -o pardiso_sym -L . -llibpardiso_GNU_IA64.so -L/home/gv/.boost/include/boost-1_38 -llapack但是它给出了这样的错误:
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.3.2/../../../../x86_64-unknown-linux-gnu/bin/ld:
cannot find -llibpardiso_GNU_IA64.so
collect2: ld returned 1 exit status我的编译方法怎么了?
这是我的系统的附加信息:
[gv@emerald my-pardiso]$ uname -a
Linux gw05 2.6.18-92.1.13.el5 #1 SMP Wed Sep 24 19:32:05 EDT 2008
x86_64 x86_64 x86_64 GNU/Linux
[gv@emerald my-pardiso]$ gcc --version
gcc (GCC) 4.3.2更新
根据戴夫·甘布尔的建议,图书馆得到了认可。但现在它给出了不同的错误:
$ gcc pardiso_sym.c -o pardiso_sym -L . -lpardiso_GNU_IA64 -L/home/gv/.boost/include/boost-1_38 -llapack
./libpardiso_GNU_IA64.so: undefined reference to `s_stop'
./libpardiso_GNU_IA64.so: undefined reference to `s_wsfe'
./libpardiso_GNU_IA64.so: undefined reference to `e_wsfe'
./libpardiso_GNU_IA64.so: undefined reference to `z_abs'
./libpardiso_GNU_IA64.so: undefined reference to `s_cat'
./libpardiso_GNU_IA64.so: undefined reference to `s_copy'
./libpardiso_GNU_IA64.so: undefined reference to `do_fio'发布于 2009-08-07 03:30:10
编辑:我看了pardiso手册。以下是解决办法:
gcc pardiso_sym.c -o pardiso_sym -L . -lpardiso_GNU_IA64 -L/home/gv/.boost/include/boost-1_38 -llapack在这里,我从一开始就删除了"lib“,从-lpardiso_GNU_IA64的末尾删除了”-lpardiso_GNU_IA64“
发布于 2009-08-07 03:57:34
编辑:对于新的错误,您将需要-lg2c之后的-lapack (fortran兼容性库)
EDIT2:还添加了-lgfortran和其他您可能需要的东西。在谷歌上搜索一个缺失的符号时,通常会发现它所包含的图书馆。一个接一个地添加库,直到满足所有依赖关系为止。
所以在你的例子中,例程是这样的:
链接错误-从g2c获得未解决的符号
添加了g2c --从gfortran获得符号
添加了gfortran --得到一些其他的符号,查找它们,然后一个一个地添加libs。
Libray order很重要,例如,如果在lapak之前包含了g2c,那么链接器会在它知道lapak需要它的所有符号之前扔掉它们(MS做了2次传递来修复这些符号)。因此,如果您看到库中已经包含了一个丢失的符号,请查看哪个库需要它,并将这个库与后面的符号一起移动。
https://stackoverflow.com/questions/1242742
复制相似问题