Пытаюсь сделать, чтобы программа использовала библиотеку 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?
Здравствуйте, 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.
Спасибо!
P>Сделал через -rpath, всё получилось:
P>>> g++ -o main main.o -lssl -lcrypto -Wl,-rpath=/usr/local/ssl/lib
P>
Имейте ввиду, что на других машинах, где нет библиотек в папке /usr/local/ssl/lib, может не запуститься.
Здравствуйте, 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'