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