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
Post a Comment