测试

测试

我正在尝试安装“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 <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,如下所示

  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- 我没有任何方法对其进行功能测试,但它至少可以运行:

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

答案2

@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从他的列表中删除了安装库。)

    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 文件。

测试

为了测试这个库,我使用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
    

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

相关内容