Nie przeszkadza edycji wygenerowany Makefile, który jest co staram ostatni ...
Nie jestem pewien, czy można ustawić go ze zmienną powłoki i ścieżką względną. I nie wymyślić rozszerza $ORIGIN
w $ORIGIN/../lib64
. W tym przypadku, myślę, że musisz użyć ldconfig
do dodać$ORIGIN/../lib64
do ścieżek wyszukiwania biblioteki. Zobacz finding ldd search path w witrynie Server Fault, aby uzyskać więcej informacji.
Ponieważ nie jestem pewien, dostarczę instrukcje tak. Nie musisz zmieniać plików Makefile. W rzeczywistości nie miałem szczęścia w przeszłości, ponieważ rzeczy zostały nadpisane, a inne rzeczy, takie jak CFLAGS
i LDFLAGS
, zostały zignorowane.
Zobacz także Build OpenSSL with RPATH? Twoje pytanie i cytowane pytanie to inne pytanie, które zbliża się do podobnych odpowiedzi (bez duplikacji między nimi). Ale zapewnia pozycję programisty OpenSSL na RPATH. To był prywatny adres e-mail, więc udostępniłem odpowiednie informacje, a nie całą wiadomość.
Jeśli uda Ci się osadzić $ORIGIN/../lib64
w sekcji ELF i zadziała, to zgłoś to. Poniżej używam /usr/local/ssl/lib
dla mojego RPATH. Powinieneś zastąpić $ORIGIN/../lib64
dla /usr/local/ssl/lib
.
OpenSSL obsługuje RPATH
„s po wyjęciu z pudełka dla celów BSD (ale nie innych). Od Configure pojawia
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
# .so objects. Apparently application RPATH is not global and does
# not apply to .so linked with other .so. Problem manifests itself
# when libssl.so fails to load libcrypto.so. One can argue that we
# should engrave this into Makefile.shared rules or into BSD-* config
# lines above. Meanwhile let's try to be cautious and pass -rpath to
# linker only when --prefix is not /usr.
if ($target =~ /^BSD\-/)
{
$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
}
Najłatwiej zrobić to za OpenSSL 1.0.2 byćadd it to linker flags during configuration
./config -Wl,-rpath=/usr/local/ssl/lib
Można również edytować Konfiguracja linii i twarde kod rpath
. Na przykład pracuję nad Debianem x86_64. Więc otworzyłem plik Configure
w edytorze, kopiowane linux-x86_64
nazwie to linux-x86_64-rpath
i złożył następujące zmiany dodać opcję -rpath
:
"linux-x86_64-rpath", "gcc:-m64 -DL_ENDIAN -O3 -Wall -Wl,-rpath=/usr/local/ssl/lib::
-D_REENTRANT::-Wl,-rpath=/usr/local/ssl/lib -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:
${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Powyżej pola 2 i 6 zostały zmienione. Odpowiadają one $cflag
i $ldflag
w systemie kompilacji OpenSSL.
Następnie należy skonfigurować z nową konfiguracją:
$ ./Configure linux-x86_64-rpath shared no-ssl2 no-ssl3 no-comp \
--openssldir=/usr/local/ssl enable-ec_nistp_64_gcc_128
Wreszcie, po make
, zweryfikować ustawienia zatrzymany:
$ readelf -d ./libssl.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./libcrypto.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./apps/openssl | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
Po wykonać make install
, następnie ldd
przyniesie oczekiwanych rezultatów :
$ ldd /usr/local/ssl/lib/libssl.so
linux-vdso.so.1 => (0x00007ffceff6c000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007ff5eff96000)
...
$ ldd /usr/local/ssl/bin/openssl
linux-vdso.so.1 => (0x00007ffc30d3a000)
libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f9e8372e000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f9e832c0000)
...
To nie jest i jest to częścią całego problemu. Potrzebuję napisu "ORIGIN /../ lib64" do napisania w pliku wykonywalnym. Nie może być żadnej zamiany. –
Czy możesz wyjaśnić, z której wersji programu openssl korzystasz i jaka linia pliku Makefile zmieniłeś? –
OpenSSL ma plik 'Makefile.org' i kilka rekurencyjnych plików Makefile. I nie honorują 'CFLAGS',' LDFLAGS', itd. Więc * "W twoim makefile try ..." * jest * nie * tak proste, jak się wydaje. – jww