ajuda a vincular estática .so ao meu executável

0

Eu tenho um código .cpp que eu escrevi, que é escrito em torno de um programa de software comercial, onde eles fornecem uma grande classe de biblioteca c ++ para usar. Eu quero link estático seu objeto compartilhado libtdfdll.so em meu executável. Eles não me fornecem um arquivo libtdfdll.a apenas o arquivo .so . Eu estou fazendo isso no SLES 11.4 usando g ++ 4.8.3.

meu arquivo cpp é process_tdf_v12.5.cpp

Aqui está o que eu faço agora para vinculação dinâmica básica que funciona:

g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include -L../tdflibs12.5/lib -ltdfdll -lm

isso também funciona para compilar / vincular:

g++ process_tdf_v12.5.cpp -I../tdflibs12.5/include ../tdflibs12.5/libtdfdll.so -lm

mas quando eu executo meu executável, obtenho

error while loading shared libraries: libtdfdll.so.1: cannot open shared object file: No such file or directory

a menos que eu faça um

setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ron/tdflibs12.5/lib

que eu não quero fazer.

Eu quero que meu executável do meu process_tdf_v12.5.cpp contenha a versão específica 12.5 do tdflibs12.5/lib/libtdfdll.so , para que eu não precise copiar a versão 12.5 correta do libtdfdll.so para outros sistemas ou me preocupar com versões diferentes do .so causando um problema. Como faço isso?

se eu tiver apenas um arquivo .so, a vinculação estática pode ser feita com ele?

Eu também não quero link estático mais nada, apenas este libtdfdll.so file

    
por ron 02.04.2018 / 22:30

1 resposta

0

Não pode ser feito - as bibliotecas compartilhadas não possuem algumas das informações incluídas em uma biblioteca estática. Parece que você tem um problema XY. Você está perguntando sobre como link estático de uma biblioteca compartilhada, mas o que você realmente precisa é de uma maneira melhor de distribuir seu aplicativo. Eu recomendaria usar algo como Arminho . Agrupa bibliotecas compartilhadas em um executável, dando a aparência de uma biblioteca vinculada estaticamente

Há também flatpak . Embora isso provavelmente não resolva o problema que você está tendo, ele oferece uma maneira muito portátil de entregar seu aplicativo mais dependências (não apenas bibliotecas compartilhadas)

    
por 02.04.2018 / 22:43