linux - OpenSSL link libcrypto.a in a static way -


i have following makefile , add library "libcrypto.a" in static way. need because target system cannot install openssl libraries.

    # environment     mkdir=mkdir     cp=cp     grep=grep     nm=x86_64-linux-nm     ccadmin=ccadmin     ranlib=x86_64-linux-ranlib     cc=x86_64-linux-gnu-gcc     ccc=x86_64-linux-gnu-g++     cxx=x86_64-linux-gnu-g++     fc=x86_64-linux-gfortran     as=x86_64-linux-as      # macros     cnd_platform=gnu-linux     cnd_dlib_ext=so     cnd_conf=release_x86_64     cnd_distdir=dist     cnd_builddir=build      # include project makefile     include makefile      # object directory     objectdir=${cnd_builddir}/${cnd_conf}/${cnd_platform}      # object files     objectfiles= \         ${objectdir}/_ext/7daaf93a/dtacommand.o \         ${objectdir}/_ext/7daaf93a/dtadev.o \         ${objectdir}/_ext/7daaf93a/dtadevgeneric.o \         ${objectdir}/_ext/7daaf93a/dtadevopal.o \         ${objectdir}/_ext/7daaf93a/dtadevopal1.o \         ${objectdir}/_ext/7daaf93a/dtadevopal2.o \         ${objectdir}/_ext/7daaf93a/dtahashpwd.o \         ${objectdir}/_ext/7daaf93a/dtahexdump.o \         ${objectdir}/_ext/7daaf93a/dtaresponse.o \         ${objectdir}/_ext/7daaf93a/dtasession.o \         ${objectdir}/_ext/b7b9df0c/blockwise.o \         ${objectdir}/_ext/b7b9df0c/chash.o \         ${objectdir}/_ext/b7b9df0c/hmac.o \         ${objectdir}/_ext/b7b9df0c/pbkdf2.o \         ${objectdir}/_ext/b7b9df0c/sha1.o \         ${objectdir}/_ext/822bcbe5/dtadevlinuxnvme.o \         ${objectdir}/_ext/822bcbe5/dtadevlinuxsata.o \         ${objectdir}/_ext/822bcbe5/dtadevos.o \         ${objectdir}/getpassphrase.o \         ${objectdir}/linuxpba.o \         ${objectdir}/unlockseds.o       # c compiler flags     cflags=-m64      # cc compiler flags     ccflags=-m64     cxxflags=-m64      # link libraries , options     ldlibsoptions=-lcurses -ltinfo      # build targets     .build-conf: ${build_subprojects}         "${make}"  -f nbproject/makefile-${cnd_conf}.mk ${cnd_distdir}/${cnd_conf}/${cnd_platform}/linuxpba      ${cnd_distdir}/${cnd_conf}/${cnd_platform}/linuxpba: ${objectfiles}         ${mkdir} -p ${cnd_distdir}/${cnd_conf}/${cnd_platform}         ${link.cc} -o ${cnd_distdir}/${cnd_conf}/${cnd_platform}/linuxpba ${objectfiles} ${ldlibsoptions} -s      ${objectdir}/_ext/7daaf93a/dtacommand.o: ../common/dtacommand.cpp          ${mkdir} -p ${objectdir}/_ext/7daaf93a         ${rm} "$@.d"         $(compile.cc) -o2 -werror -i../linux -i../common -i../common/pbkdf2 -std=c++11 -mmd -mp -mf "$@.d" -o ${objectdir}/_ext/7daaf93a/dtacommand.o ../common/dtacommand.cpp   #...... similar other elements of "objectdir ......" 

i tried add "ldlibsoptions" several things don't find correct way this, example:

  • "-lcrypto" links library in dynamic way (not case)
  • "[absolute path]/libcrypto.a" returns "libcrypto.a(dso_dlfcn.o): undefined reference symbol 'dlclose@@glibc_2.2.5' //lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: dso missing command line".
    • "[absolute path]/libcrypto.a -ldl"libcrypto.a(evp_enc.o): relocation r_x86_64_32 against `.rodata.str1.1' can not used when making shared object; recompile -fpic

any suggestion ?

it looks libcrypto.a not compiled pic (or @ least pie), , toolchain defaults creating pie-enabled executables. have link command this:

gcc -fno-pie -no-pie … -wl,-bstatic -lcrypto -wl,-bdynamic -ldl -lpthread 

some parts of libcrypto depend on libdl , libpthread, these libraries required, too, must link them dynamically because part of glibc.


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -