Como instalar uma biblioteca que usa g77

0

Estou tentando instalar a biblioteca "TAUCS" ( link ). No entanto, estou recebendo o seguinte erro:

/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> 
                   ^

mais erros seguem.

Eu acho que esse erro surge como eu já uso o gcc que usa gfortran em vez de g77.

1) Eu poderia pegar o arquivo antigo fazendo isso:

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

Isso criou os seguintes arquivos em / usr / lib /

libg2c.so.0
libg2c.so.0.0.0

2) Depois disso, eu encontrei link online que sugere para criar um link, assim:

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

Eu acho que incluímos isso junto com

CILKC=$(CC)

Então, comentei esta linha e adicionei um link simples.

Mas recebo o seguinte erro:

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

Alguma orientação seria apreciada?

Atualização com base na resposta @steeldriver: Depois que eu fiz como sugerido pelo usuário acima mencionado, tudo obedeceu bem. Mas, estou recebendo alguns avisos com os quais estou muito preocupado .

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

Eu acho que o problema poderia ser que essa biblioteca pode ser de 64 bits contra 32 bits. É possível ter as duas versões das bibliotecas? Eu poderia colocar menos frequente em / usr / local / lib. Como eu poderia garantir que versões específicas de bibliotecas estão vinculadas no makefile?

    
por Garima Singh 21.01.2015 / 12:47

2 respostas

1

Eu não sei se ele construiu corretamente , mas eu consegui construir o TAUCS 2.2 no Ubuntu 12.04 de 32 bits usando o gfortran da seguinte forma

  1. Faça o download da Versão 2.2 do código, com bibliotecas externas, formato tgz

    wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz
    
  2. Descompacte-o no local escolhido

    mkdir taucs_full
    
    tar xvf taucs_full.tgz -C taucs_full
    
    cd taucs_full
    
  3. Se você ainda não fez isso, instale libf2c2-dev (para libf2c )

    sudo apt-get install libf2c2-dev
  4. Remova o -Werror do arquivo de opções do compilador global (haverá como avisos, portanto, ele nunca será criado se forem tratados como erros)

    sed -i 's/-Werror//g' config/linux.mk
    
  5. Agora, execute o script configure

    ./configure
    
  6. Finalmente, precisamos fazer algum comando e compartilhamento de bibliotecas para o real make

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

Você deve obter um executável binário em ./bin/linux - não tenho como testá-lo funcionalmente, mas ele é executado pelo menos:

$ bin/linux/taucs_run 
taucs_run: there is no matrix!
    
por steeldriver 22.01.2015 / 03:35
1

@ A resposta da steeldriver não funcionou como está para mim, então eu a adaptei da seguinte forma. Só mudei os passos 3 e 6 e adicionei a parte de teste.

Estou usando um Ubuntu 14.04 32 bits completamente novo. (Observe que o uso de 64 bits torna as coisas mais complicadas.)

Compilando

  1. Faça o download da Versão 2.2 do código, com bibliotecas externas, formato tgz

    wget http://www.tau.ac.il/~stoledo/taucs/2.2/taucs_full.tgz
    
  2. Descompacte-o no local escolhido

    mkdir taucs_full
    
    tar xvf taucs_full.tgz -C taucs_full
    
    cd taucs_full
    
  3. Instale os pacotes gfortran e libf2c2-dev . (Eu não sei porque o @steeldriver removeu a instalação do lib da sua lista.)

    sudo apt-get install gfortran libf2c2-dev
    
  4. Remova o -Werror do arquivo de opções do compilador global (haverá como avisos, portanto, ele nunca será criado se forem tratados como erros)

    sed -i 's/-Werror//g' config/linux.mk
    
  5. Agora, execute o script configure

    ./configure

  6. Finalmente, precisamos fazer algum comando e biblioteca para o make real. (Este comando é diferente do da solução @ steeldriver.)

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

Você deve obter um executável binário em ./bin/linux e a lib em ./lib/linux.

Teste

Para testar a biblioteca, usei o arquivo test_taucs.cpp de este site :

  1. Coloque test_taucs.cpp na pasta taucs_full
  2. Instalar o g ++

    sudo apt-get install g++
    
  3. Compile o arquivo 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. Execute a.out

    ./a.out
    

A saída deve conter a solução (0 2 0 4), conforme descrito na postagem do blog vinculada.

    
por gebi 18.12.2015 / 12:49

Tags