如何安装使用g77的库

我正在尝试安装“TAU​​CS”( http://www.tau.ac.il/~stoledo/taucs/ )库。 但是,我收到以下错误:

/usr/bin/ld: skipping incompatible external/lib/linux/libmetis.a when searching for -lmetis /usr/bin/ld: cannot find -lmetis /usr/bin/ld: cannot find -lg2c collect2: error: ld returned 1 exit status make: [build/linux/taucs_config_tests.h] Error 1 (ignored) obj/linux/taucs_c99_complex_test build/linux/taucs_config_tests.h make: obj/linux/taucs_c99_complex_test: Command not found make: [build/linux/taucs_config_tests.h] Error 127 (ignored) cc -c -O3 -Wall -Werror -std=c99 -DMACHTYPE_ -I src/ -I build/linux/ -I external/src/ \ progs/taucs_cilk_test.c \ -oobj/linux/taucs_cilk_test.o progs/taucs_cilk_test.c:8:19: fatal error: cilk.h: No such file or directory #include  ^ 

更多错误如下。

我认为这个错误出现了,因为我已经使用gcc而不是g77使用gfort。

1)我可以通过这样做得到旧文件:

 wget http://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/libg2c0_3.4.6-6ubuntu5_i386.deb sudo dpkg -i --force-all libg2c0_3.4.6-6ubuntu5_i386.deb 

这在/ usr / lib /中创建了以下文件

 libg2c.so.0 libg2c.so.0.0.0 

2)之后,我找到了建议创建软链接的在线链接,如下所示:

 cd /usr/lib ln -s libg2c.so.0 libg2c.so 

我想我已将此包括在内

 CILKC=$(CC) 

所以,我评论了这一行,并添加了软链接。

但是,我收到以下错误:

 build/linux/makefile:11: *** commands commence before first target. Stop. 

一些指导意见将不胜感激?

基于@steeldriver回复的更新:在我按照上述用户的建议做了之后,一切都很顺利。 但是,我收到了一些我非常担心的警告。

 usr/bin/ld: skipping incompatible external/lib/linux/liblapack.a when searching for -llapack .... /usr/bin/ld: skipping incompatible external/lib/linux/libf77blas.a when searching for -lf77blas ... /usr/bin/ld: skipping incompatible external/lib/linux/libcblas.a when searching for -lcblas .... /usr/bin/ld: skipping incompatible external/lib/linux/libatlas.a when searching for -latlas .... /usr/bin/ld: skipping incompatible external/lib/linux/libmetis.a when searching for -lmetis 

我认为这个问题可能是这些库可能是64位而不是32位。 是否可以拥有两个版本的库? 我可以在/ usr / local / lib中减少频率。 我怎样才能确保在makefile中链接特定版本的库?

我不知道它是否正确构建,但我能够使用gfortran在32位Ubuntu 12.04上构建TAUCS 2.2,如下所示

  1. 下载代码的2.2版,使用外部库,tgz格式

     wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz 
  2. 在您选择的位置打开包装

     mkdir taucs_full tar xvf taucs_full.tgz -C taucs_full cd taucs_full 
  3. 如果您还没有这样做,请安装libf2c2-dev (对于libf2c

     sudo apt-get install libf2c2-dev 

  4. 从全局编译器选项文件中删除-Werror标志(会有警告,因此如果我们将它们视为错误,它将永远不会构建)

     sed -i 's/-Werror//g' config/linux.mk 
  5. 现在运行configure脚本

     ./configure 
  6. 最后,我们需要为实际的make做一些命令和库争论

     make "CC=gcc" "FC=gfortran -ff2c" "LIBF77=-Wl,-Bdynamic -lgfortran" 

您应该在./bin/linux获得二进制可执行文件 – 我没有任何方法可以在function上测试它,但它至少运行:

 $ bin/linux/taucs_run taucs_run: there is no matrix! 

@ steeldriver的回答对我来说不起作用,所以我按如下方式调整了它。 我只更改了第3步和第6步,并添加了测试部分。

我正在使用一个全新的Ubuntu 14.04 32位。 (注意,使用64位会使事情变得更复杂。)

编译

  1. 下载代码的2.2版,使用外部库,tgz格式

     wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz 
  2. 在您选择的位置打开包装

     mkdir taucs_full tar xvf taucs_full.tgz -C taucs_full cd taucs_full 
  3. 安装包gfortranlibf2c2-dev 。 (我不知道为什么@steeldriver会从他的列表中删除安装lib。)

     sudo apt-get install gfortran libf2c2-dev 
  4. 从全局编译器选项文件中删除-Werror标志(会有警告,因此如果我们将它们视为错误,它将永远不会构建)

     sed -i 's/-Werror//g' config/linux.mk 
  5. 现在运行configure脚本

    ./configure

  6. 最后,我们需要为实际的make做一些命令和库争论。 (此命令与@ steeldriver的解决方案中的命令不同。)

     make "CC=gcc" "FC=gfortran -ff2c" "LIBF77=-Wl,-Bdynamic -lgfortran -lf2c -u MAIN__" 

您应该在./bin/linux中获取二进制可执行文件,在./lib/linux中获取lib。

测试

为了测试lib,我使用了这个站点的 test_taucs.cpp文件:

  1. test_taucs.cpp放在taucs_full文件夹中
  2. 安装g ++

     sudo apt-get install g++ 
  3. 编译cpp文件

     g++ test_taucs.cpp -I ./src -I ./build/linux/ -L lib/linux/ -ltaucs -L external/lib/linux -llapack -lf77blas -lcblas -latlas -lmetis -Wl,-Bdynamic -lgfortran -lm -lf2c -u MAIN__ 
  4. 运行a.out

     ./a.out 

输出应包含解决方案(0 2 0 4),如链接博客文章中所述。