Как прилинковать свою версию openssl библиотеки?
От: prrt  
Дата: 19.09.22 09:50
Оценка:
Пытаюсь сделать, чтобы программа использовала библиотеку openssl, отличную от системной (под Linux). Скомпилировал openssl в /usr/local/ssl/
> ls /usr/local/ssl/lib
engines-1.1  libcrypto.a  libcrypto.so  libcrypto.so.1.1  libssl.a  libssl.so  libssl.so.1.1  pkgconfig

Создал тестовый main.cpp:
> cat main.cpp
int main(int argc, char** argv) {

    return 0;
}
> g++ -c -MMD -MP -MF "main.o.d" -o main.o main.cpp
> g++ -o main main.o -L/usr/local/ssl/lib -lssl -lcrypto

Далее в выводе ldd main я рассчитываю увидеть строку
libssl.so.1.1 => /usr/local/ssl/lib/libssl.so.1.1
Но вместо этого получаю:
> ldd main
        linux-vdso.so.1 (0x00007fff72f34000)
        libssl.so.1.1 => /usr/lib64/libssl.so.1.1 (0x00007f1303600000)
        libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x00007f1303113000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f1302d32000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f13029fa000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f13027e2000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f1302428000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f1302224000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1302006000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1303894000)


Подскажите, как заставить компилятор прилинковать отличную от системной версию библиотеки openssl?
Re: Как прилинковать свою версию openssl библиотеки?
От: kov_serg Россия  
Дата: 19.09.22 10:16
Оценка:
Здравствуйте, prrt, Вы писали:

P>Подскажите, как заставить компилятор прилинковать отличную от системной версию библиотеки openssl?

Прилинковать статически ( -l:libmylibfile.a -l:libmydlibfile.so )
Использовать LD_LIBRARY_PATH при запуске
Задать -rpath=$ORIGIN/libs и туда свалить библиотеки
Использовать dlopen
Re[2]: Как прилинковать свою версию openssl библиотеки?
От: prrt  
Дата: 19.09.22 12:24
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Прилинковать статически ( -l:libmylibfile.a -l:libmydlibfile.so )

_>Использовать LD_LIBRARY_PATH при запуске
_>Задать -rpath=$ORIGIN/libs и туда свалить библиотеки
_>Использовать dlopen

Сделал через -rpath, всё получилось:
> g++ -o main main.o -lssl -lcrypto -Wl,-rpath=/usr/local/ssl/lib

Заодним почитал про отличие -L от -rpath.

Спасибо!
Re[3]: Как прилинковать свою версию openssl библиотеки?
От: DiPaolo Россия  
Дата: 19.09.22 14:04
Оценка:
P>Сделал через -rpath, всё получилось:
P>
>> g++ -o main main.o -lssl -lcrypto -Wl,-rpath=/usr/local/ssl/lib
P>


Имейте ввиду, что на других машинах, где нет библиотек в папке /usr/local/ssl/lib, может не запуститься.
Патриот здравого смысла
Re[4]: Как прилинковать свою версию openssl библиотеки?
От: kov_serg Россия  
Дата: 19.09.22 14:40
Оценка:
Здравствуйте, DiPaolo, Вы писали:

P>>Сделал через -rpath, всё получилось:

P>>
>>> g++ -o main main.o -lssl -lcrypto -Wl,-rpath=/usr/local/ssl/lib
P>>


DP>Имейте ввиду, что на других машинах, где нет библиотек в папке /usr/local/ssl/lib, может не запуститься.

Поэтому надо не абсолютные, а относительные пути использовать или относительно исполняемого файла -Xlinker '-rpath=$ORIGIN/libs'
Re: Как прилинковать свою версию openssl библиотеки?
От: AleksandrN Россия  
Дата: 26.09.22 21:29
Оценка:
Здравствуйте, prrt, Вы писали:

P>Пытаюсь сделать, чтобы программа использовала библиотеку openssl, отличную от системной (под Linux). Скомпилировал openssl в /usr/local/ssl/


Собери под другим именем, например — libcrypto_my_build.so
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.