Erro ao instalar o pynauty: “erro: o comando 'x86_64-linux-gnu-gcc' falhou com o status de saída 1”

1

Estou tentando instalar o pacote Python pynauty . Quando eu corri python setup.py build , recebi o seguinte erro. Eu instalei as dependências. Como posso instalar com sucesso este pacote Python?

$ python setup.py build
running build
running build_py
running build_ext
building 'pynauty._pynauty' extension
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Inauty -Isrc -I/usr/include/python2.7 -c src/pynauty.c -o build/temp.linux-x86_64-2.7/src/pynauty.o -O4
In file included from src/pynauty.c:16:0:
nauty/nauty.h:40:0: warning: "_FILE_OFFSET_BITS" redefined
 #define _FILE_OFFSET_BITS 0
 ^
In file included from /usr/include/python2.7/pyconfig.h:3:0,
                 from /usr/include/python2.7/Python.h:8,
                 from src/pynauty.c:15:
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h:1157:0: note: this is the location of the previous definition
 #define _FILE_OFFSET_BITS 64
 ^
src/pynauty.c: In function ‘_make_nygraph’:
src/pynauty.c:363:33: warning: passing argument 2 of ‘PyDict_Next’ from incompatible pointer type
     while (PyDict_Next(adjdict, &i, &key, &adjlist)) {
                                 ^
In file included from /usr/include/python2.7/Python.h:101:0,
                 from src/pynauty.c:15:
/usr/include/python2.7/dictobject.h:114:17: note: expected ‘Py_ssize_t *’ but argument is of type ‘int *’
 PyAPI_FUNC(int) PyDict_Next(
                 ^
src/pynauty.c: In function ‘init_pynauty’:
src/pynauty.c:537:15: warning: variable ‘m’ set but not used [-Wunused-but-set-variable]
     PyObject *m;
               ^
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/src/pynauty.o nauty/nauty.o nauty/nautil.o nauty/naugraph.o -o build/lib.linux-x86_64-2.7/pynauty/_pynauty.so
/usr/bin/ld: nauty/nauty.o: relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
nauty/nauty.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    
por Konformist Liberal 13.04.2015 / 21:52

4 respostas

1

Não, por favor, não faça assim! Autor de pynauty, Peter Dobcsányi disse-me, que esta versão é inerentemente buggish e não produzirá resultados corretos (especialmente, na função 'certificar').

Ele lançou recentemente a nova versão, 0.6.0 ( link ) e esta versão é absolutamente correta e compatível com o Python 2.7 e com o mais recente Nauty!

Eu testei isso e tudo funciona bem

    
por Vast Academician 19.10.2015 / 11:06
1

A mensagem de erro completa informa a você parte da solução: você precisa compilar nauty com o sinalizador -fPIC .

  1. Download nauty, descompacte-o, entre no diretório
  2. CFLAGS=-fPIC ./configure
  3. make
  4. Transfira o pynauty, descompacte-o, entre no diretório
  5. ln -s ../nauty* nauty
  6. No entanto, o arquivo setup.py do pynauty parece estar mal configurado: ele não inclui os arquivos nauty corretos e, portanto, falhará na importação se for construído e instalado neste momento. Modifique o argumento extra_objects em setup.py (linha 37):

    # from
    extra_objects = [ nauty_dir + '/' + 'nauty.so', ],
                          nauty_dir + '/' + 'nautil.o',
                          nauty_dir + '/' + 'naugraph.o'
                        ],
    # change it to
    extra_objects = [nauty_dir + '/' + 'nauty.a'],
    
  7. python setup.py build

  8. python setup.py install (se você estiver instalando no sistema, use sudo , mas de preferência use um virtualenv )

Enquanto o pacote é agora instalado e importável, todo o conjunto de testes falha. Este é um problema que deve ser corrigido pelo mantenedor da biblioteca; considere relatar o bug para eles.

    
por davidism 23.04.2015 / 22:20
0

Além da resposta do davidismo, descobri que os testes foram quebrados devido a um aviso que recebi ao compilar o pynauty 0.5 usando o Python 2.7 e o nauty25r9:

src/pynauty.c: In function ‘_make_nygraph’:
src/pynauty.c:363:33: warning: passing argument 2 of ‘PyDict_Next’ from incompatible pointer type
     while (PyDict_Next(adjdict, &i, &key, &adjlist)) {
                                 ^
In file included from /usr/include/python2.7/Python.h:101:0,
                 from src/pynauty.c:15:
/usr/include/python2.7/dictobject.h:114:17: note: expected ‘Py_ssize_t *’ but argument is of type ‘int *’
 PyAPI_FUNC(int) PyDict_Next(

Para corrigir esse aviso, altere

int i,j;

em src/pynauty.c para

Py_ssize_t i;
int j;

e recompilar pynauty. O aviso deve desaparecer e os testes devem passar!

    
por fab 07.10.2015 / 17:31
-1

Não estou certo sobre seus passos, apesar da sua edição. Assumindo você:

  • baixou o link
  • extraiu-o para o aDirectory
  • executou cd aDirectory/nauty04/ (ou, de outra forma, (c) suspendeu (d) o diretório para ele
  • executado seguindo os comandos sem um problema ou erro:

./configure # note this command for later make nauty.o nautil.o naugraph.o ln -s ../nautyXX nauty

e encontrou um erro que você descreveu no parágrafo de abertura da sua pergunta, do que o problema com o qual você mais provavelmente se deparou é que o Python por padrão está configurado sem bibliotecas compartilhadas. Pacote infeliz que você baixa, está procurando pela biblioteca compartilhada sendo compilada e não encontra nenhuma.

Solução proposta: execute ./configure --enable-shared . Dessa forma, você diz ao Python para compilá-los também. Você pode ter problemas dependendo de quais bibliotecas compartilhadas você tem, mas não pode dizer nada além de especulação sem saber mais do seu lado.

Fontes:

Eu recomendo o link do Github, é mais esclarecedor aqui.

    
por LIttle Ancient Forest Kami 15.04.2015 / 15:12