- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下生成文件,我将以静态方式添加库“libcrypto.a”。我需要这样做,因为目标系统无法安装 openssl 库。
# 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 and 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 FOR THE OTHER ELEMENTS OF "OBJECTDIR ......"
我试图在我的“LDLIBSOPTIONS”中添加一些东西,但我没有找到正确的方法,例如:
有什么建议吗?
最佳答案
OpenSSL link lincrypto.a in a static way
...
"-lcrypto" it links the library in a dynamic way (not good for my case)
使用 -l:libcrypto.a
。它指定库的全名。以下来自LD(1)
man page .请参阅有关 :filename
的部分。
-l namespec
--library=namespec
Add the archive or object file specified by namespec to the list of files to link. This option may be used any number of times. If namespec is of the form :filename, ld will search the library path for a file called filename, otherwise it will search the library path for a file called libnamespec.a.
On systems which support shared libraries, ld may also search for files other than libnamespec.a. Specifically, on ELF and SunOS systems, ld will search a directory for a library called libnamespec.so before searching for one called libnamespec.a. (By convention, a .so extension indicates a shared library.) Note that this behavior does not apply to :filename, which always specifies a file called filename.
The linker will search an archive only once, at the location where it is specified on the command line. If the archive defines a symbol which was undefined in some object which appeared before the archive on the command line, the linker will include the appropriate file(s) from the archive. However, an undefined symbol in an object appearing later on the command line will not cause the linker to search the archive again.
See the
-(
option for a way to force the linker to search archives multiple times.You may list the same archive multiple times on the command line.
This type of archive searching is standard for Unix linkers. However, if you are using ld on AIX, note that it is different from the behaviour of the AIX linker.
"[absolute path]/libcrypto.a" it returns "libcrypto.a(dso_dlfcn.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line"
针对这个问题,在 libcrypto
和 libssl
中添加 -ldl
after你的链接命令。
"[absolute path]/libcrypto.a -ldl"libcrypto.a(evp_enc.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
关于这个问题,参见What does .rodata and -fPIC mean when compiling OpenSSL?和 Compilation fails with “relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object” .
简而言之,您需要使用 shared
选项配置 OpenSSL。如果您不想构建共享库,请将 -fPIC
添加到 CFLAGS
。另见 Compilation and Installation在 OpenSSL wiki 上。
关于linux - OpenSSL 以静态方式链接 libcrypto.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45324091/
我在Linux上安装了Openssl,Openssl-dev。配置Thrift时,出现以下错误: 正在检查-lcrypto中的BN_init ...否 配置:错误:“错误:需要libcrypto。”
当我尝试编译使用 openssl 'crypto' 库函数和命令行 -lcrypto 和 gcc 4.4.3 的 C 代码时> 它给出了一个错误 `@ubu:$ gcc -ggdb aes_m.c -
我正在尝试在 XCODE 4.2 上为 mac 编译一个较旧的 objective-c 应用程序 尝试编译时出现链接错误 无法直接与架构 x86_64 的/usr/lib/libssl.0.9.7.d
我正在遵循以下位置的代码示例:http://www.openssl.org/docs/crypto/sha.html# 执行以下操作后: EVP_DigestFinal_ex(&mdctx, md_v
我正在使用 libcrypto++ 进行 aes 加密。我想在我的代码中添加以下方法:EVP_CipherInit_ex()、EVP_CipherUpdate()、EVP_CipherFinal_ex
我正在尝试将一个共享库放在一起,该库向远程服务器发出 HTTP GET 请求。我的库将由另一个应用程序加载,我想将一些统计数据发布到网络服务器 API。我的代码目前看起来像这样: void conne
我以某种方式设法在 Ubuntu 14.04 上安装了 libcrypto++ 库。现在,我在 Eclipse CDT 中有一个项目,我想创建一个可执行文件并使其独立运行在其他 linux 风格和 w
我有以下生成文件,我将以静态方式添加库“libcrypto.a”。我需要这样做,因为目标系统无法安装 openssl 库。 # Environment MKDIR=mkdir
我想尝试一个带有 makefile 的程序,但是当我将 make 放入 shell 时,错误是: g++ -g -DaUNIX -I../../acroname/aInclude -I../../a
我使用以下方法创建了一个 RSA key : RSA_generate_key(2048, RSA_F4, NULL, NULL); 现在我想将公钥导出到另一方 B。现在,我刚刚存储了整个 RSA*
我使用的是 Mac OS X 10.6 SDK,并且我的部署目标设置为 Mac OS 10.5。我链接到 libcrypto(AquaticPrime 需要这个)并发现我的应用程序无法在 Leopar
我自己编译php7。 下载php7源代码。 yum安装libxml2-devel openssl-devel.i686 配置 ./configure --prefix=/usr/local/php7
我看到了这个问题“找不到包‘libcrypto’”。我几个月前修复的相同错误是遵循以下解决方案:https://github.com/scipr-lab/libsnark/issues/99 我今天尝
我需要签署一个字符串,将公钥作为字符串发布,然后在其他地方使用公钥来验证签名的消息。这是消息签名的部分: // RSA keypair generation EVP_P
我正在尝试使用 Debian Wheezy 和 g++4.7 在我的系统上编译一个程序。我希望它能够在另一个带有 Debian Squeeze 的系统上运行(并且没有最近的 g++)。我无法在 Squ
这更像是一个假设,而我正在调试一些代码。假设我有一个应用程序(称为 X)调用一个库以通过 TLS 加密的 SMTP 连接发送电子邮件,同时 X 正在与另一个库交谈,该库通过相同的 libcrypto
我正在为 Android 应用构建一个帮助程序库,我需要为我正在使用的一些支持库提供完整的 OpenSSL 实现。我正在创建一个构建链并用它编译 libssl 和 libcrypto 但在运行时我得到
我有一个 C 文件需要在 Windows7 上编译。我已经为 gcc 安装了 MinGW。我还需要 OpenSSL,因此点击他们网站上的链接并从 Shining Light Productions 下
近 3 天以来,我一直在尝试这样做。它让我发疯。 正如您想象的那样,我对 C++ 还很陌生。 任何人都可以一步一步地指导我使用 openssl 中的函数编写一个 hello world 程序,并从 W
案例: 我正在构建一个使用 libcrypto 和 libssl 的应用程序。我正在尝试使用预构建的 libcrypto.so 和 libssl.so 并编译我的应用程序。 但我不断收到 undefi
我是一名优秀的程序员,十分优秀!