如何安装使用g77的库
我正在尝试安装“TAUCS”( 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,如下所示
-
下载代码的2.2版,使用外部库,tgz格式
wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz
-
在您选择的位置打开包装
mkdir taucs_full tar xvf taucs_full.tgz -C taucs_full cd taucs_full
-
如果您还没有这样做,请安装libf2c2-dev
(对于libf2c
)sudo apt-get install libf2c2-dev -
从全局编译器选项文件中删除
-Werror
标志(会有警告,因此如果我们将它们视为错误,它将永远不会构建)sed -i 's/-Werror//g' config/linux.mk
-
现在运行
configure
脚本./configure
-
最后,我们需要为实际的
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位会使事情变得更复杂。)
编译
-
下载代码的2.2版,使用外部库,tgz格式
wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz
-
在您选择的位置打开包装
mkdir taucs_full tar xvf taucs_full.tgz -C taucs_full cd taucs_full
-
安装包
gfortran
和libf2c2-dev
。 (我不知道为什么@steeldriver会从他的列表中删除安装lib。)sudo apt-get install gfortran libf2c2-dev
-
从全局编译器选项文件中删除
-Werror
标志(会有警告,因此如果我们将它们视为错误,它将永远不会构建)sed -i 's/-Werror//g' config/linux.mk
-
现在运行
configure
脚本./configure
-
最后,我们需要为实际的
make
做一些命令和库争论。 (此命令与@ steeldriver的解决方案中的命令不同。)make "CC=gcc" "FC=gfortran -ff2c" "LIBF77=-Wl,-Bdynamic -lgfortran -lf2c -u MAIN__"
您应该在./bin/linux中获取二进制可执行文件,在./lib/linux中获取lib。
测试
为了测试lib,我使用了这个站点的 test_taucs.cpp
文件:
- 将
test_taucs.cpp
放在taucs_full
文件夹中 -
安装g ++
sudo apt-get install g++
-
编译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__
-
运行a.out
./a.out
输出应包含解决方案(0 2 0 4),如链接博客文章中所述。