construindo código da fonte e adicionando-os ao seu caminho

2

Tipicamente no Debian quando você instala coisas do repositório, elas simplesmente funcionam. Ele configura as coisas muito bem e a vida é boa. Isso é ótimo para coisas que estão atualizadas no repositório.

Estou criando algumas ferramentas que gostaria de atualizar manualmente do github ou mercurial.

usando o cmake ou o script de configuração para construir o código, eu também adiciono o meu próprio caminho de prefixo para que eu possa facilmente remover ou atualizar os pacotes, se necessário.

Acabei de criar o SDL2 a partir do mercurial e instalei-o no / opt / SDL2 e adicionei-o ao meu caminho. Eu tive que fazer isso para poder criar o SDL_image

que me deu essa saída depois de terminar o processo.

Libraries have been installed in:
   /opt/SDL_IMAGE/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

Esta saída acima diz muito e eu não tenho certeza como analisá-la. No passado, eu usava um mac que simplificava muitas dessas coisas, mas no linux estou tendo alguns problemas.

Meu entendimento de ler o código acima é que devo adicionar algo assim ao meu arquivo bashrc.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/SDL_IMAGE/lib
export LD_RUN_PATH=$LD_RUN_PATH:/opt/SDL_IMAGE/lib

para o meu bashrc, de modo que quando eu estou ligando contra cabeçalhos de imagem sdl ele vai encontrá-lo? Eu folheei as man pages para ld mas honestamente eu não entendo e é por isso que estou perguntando.

Especialmente nesta linha: use o sinalizador de vinculador '-Wl, -rpath -Wl, LIBDIR'

    
por user1610950 09.11.2015 / 17:57

1 resposta

2

O Xcode e o Fink | Homebrew | MacPorts no Mac OS X têm essas complicações (eles apenas o escondem de você). Existem dois aspectos para esse problema, compilar e executar. A compilação exigirá uma variedade de detalhes para qualquer biblioteca instalada em um caminho personalizado. Esta informação para algumas bibliotecas pode ser fornecida por pkg-config , por ex. por um pequeno depósito de software que mantenho sob o meu diretório pessoal:

$ ls ~/usr/rhel6-x86_64/lib/pkgconfig/
goptfoo.pc  jkiss.pc  libsodium.pc
$ echo $PKG_CONFIG_PATH
/homes/jdoe/usr/rhel6-x86_64/lib/pkgconfig
$ pkg-config --libs --cflags libsodium
-I/homes/jdoe/usr/rhel6-x86_64/include  -L/homes/jdoe/usr/rhel6-x86_64/lib -lsodium  
$ 

Essas sequências de caracteres mágicas devem ser inseridas no processo de compilação de qualquer software que esteja sendo construído em bibliotecas na árvore de instalação personalizada. Os detalhes variam dependendo se Makefile ou autotools ou cmake ou assim por diante. Uma maneira fácil é definir CFLAGS para conter a saída pkg-config ou apenas incluir a saída na linha de construção:

mkpwhash: mkpwhash.c
        gcc -std=gnu99 'pkg-config --cflags --libs libsodium' -lcrypt -Werror -Wall -Wextra -Wundef -ftrapv -fstack-protector-all -pedantic -pipe -o mkpwhash mkpwhash.c

Para autotools ou cmake , você precisará pesquisar para ver como eles anexam essa cebola específica ao cinto, por exemplo, estudar as configurações configure.ac existentes dos pacotes que usam autotools , etc.

Para executar algo que tenha sido compilado para usar uma biblioteca compartilhada do caminho personalizado, a configuração LD_LIBRARY_PATH provavelmente será suficiente (ou, em todo o sistema, mexer com ld.so.conf ):

$ unset LD_LIBRARY_PATH
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
        libsodium.so.13 => not found
$ exec $SHELL
$ echo $LD_LIBRARY_PATH 
/homes/jdoe/usr/rhel6-x86_64/lib
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
        libsodium.so.13 => /homes/jdoe/usr/rhel6-x86_64/lib/libsodium.so.13 (0x00007e5c12ca7000)
$

(Sendo este unix, há várias maneiras de esfoliar o Bos grunniens , daí o "pelo menos um dos ..." conselhos de sua saída do processo de construção. Depósitos de software mais complicados provavelmente usarão stow ou similar, dependendo da quantidade de corda (e, portanto, dores de cabeça) que você deseja se dar.)

    
por 09.11.2015 / 19:36

Tags