Mam plik wykonywalny, który niejawnie ładuje kilka bibliotek .so, wszystkie z nich zbudowane przeze mnie. Do wdrożenia lub przynajmniej testowania/debugowania, chciałbym mieć je wszystkie w tym samym katalogu:Jak zakodować plik wykonywalny na ścieżce Linux?
my_executable
libmylib1.so
libmylib2.so
aby uzyskać plik wykonywalny, aby załadować biblioteki niejawnie, chciałbym ustawić rpath (DT_RUNPATH) dla katalogu wykonywalnego. Z OS X, zrobiłbym to tak:
clang -dynamiclib -o libmylib1.dylib -install_name @rpath/libmylib1.dylib src1.c src2.c
clang -dynamiclib -o libmylib2.dylib -install_name @rpath/libmylib2.dylib src3.c src4.c
clang -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath,@loader_path/. main.c
Zawiadomienie @loader_path/.
który tworzy rpath wykonywalnego w OS X. Z Linuksem, najbliższa mogę dojść do tego jest
gcc -dynamiclib -o libmylib1.so src1.c src2.c
gcc -dynamiclib -o libmylib2.so src3.c src4.c
gcc -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath=. main.c
Problem polega na tym, że w systemie Linux ścieżka rpath podąża za bieżącym katalogiem roboczym, a nie katalogiem wykonywalnym. Czy istnieje sposób na osiągnięcie tego samego w Linuksie?
To było to! Dziękuję Ci. –