我正在尝试安装“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 <cilk.h>
^
随后出现更多错误。
我认为出现此错误是因为我已经使用了使用 gfortran 而不是 g77 的 gcc。
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 位。是否可以同时拥有这两个版本的库?我可以将 less 放在 /usr/local/lib 中。如何确保特定版本的库在 makefile 中链接?
答案1
我不知道它是否能建成正确地但我能够使用 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
- 我没有任何方法对其进行功能测试,但它至少可以运行:
$ bin/linux/taucs_run
taucs_run: there is no matrix!
答案2
@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从他的列表中删除了安装库。)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 文件。
测试
为了测试这个库,我使用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
输出应包含链接博客文章中所述的解决方案 (0 2 0 4)。