【发布时间】:2011-08-07 17:19:15
【问题描述】:
我遇到了将 OpenSSL 库链接到现有项目的问题。 我哪里弄错了?
以下是我遵循的步骤。
我已经下载了 SSL 库,配置并安装了它。它安装在/usr/local/ssl。
2) 我已将/usr/local/ssl/lib 中的libcrypto.a 和libssl.a 复制到我的项目中,例如/mnt/linux/bla/bla/lib。
3) 然后我编辑 make 文件并在那里添加 libssl libcrpto 的路径。添加的路径是项目中的路径,例如/mnt/linux/bla /bla
3) 制作
4) 通过 slick edit 构建项目
当它构建时,我得到一个很长的错误链,比如
../lib/libssl.a(t1_enc.o) :In function 't1sl_steup_key_block: undefined ref
现在,我想将 .a 文件复制到项目中可能会有问题。是否有任何替代方案,或者我应该使用ln -s 将/usr/local/openssl/lib 中的.a 文件链接到我的项目库文件夹中?以下是错误。
Debug/FC5/m2pa.o -ldl -lpthread -ltdapi ../septel/gctlib.lib ../lib/libpq.a ../asn1/lib/libasn1per.a ../mysql/lib/libmysqlclient.a -L../lib ../asn1/lib/libasn1rt.a -lm -lcrypt -lcrypto -lssl -rdynamic
../lib/libssl.a(ssl_lib.o): In function `SSL_set_quiet_shutdown':ssl_lib.c:(.text+0x670): multiple definition of `SSL_set_quiet_shutdown'
../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x125c): first defined here
/usr/bin/ld: Warning: size of symbol `SSL_set_quiet_shutdown' changed from 45 in ../mysql/lib/libmysqlclient.a(ssl.o) to 12 in ../lib/libssl.a(ssl_lib.o)
../lib/libssl.a(ssl_lib.o): In function `SSL_get_quiet_shutdown':ssl_lib.c:(.text+0x680): multiple definition of `SSL_get_quiet_shutdown'
../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x12down' changed from 35 in ../mysql/lib/libmysqlclient.a(ssl.o) to 8 in ../lib/libssl.a(ssl_lib.o)
../lib/libssl.a(ssl_err2.o): In function `SSL_load_error_strings':ssl_err2.c:(.text+0x4): undefined reference to `ERR_load_crypto_strings'
../lib/libssl.a(ssl_algs.o): In function `SSL_library_init':ssl_algs.c:(.text+0x4): undefined reference to `EVP_des_cbc'
:ssl_algs.c:(.text+0xc): undefined reference to `EVP_add_cipher'
:ssl_algs.c:(.text+0x11): undefined reference to `EVP_des_ede3_cbc'
:ssl_algs.c:(.text+0x19): undefined reference to `EVP_add_cipher'
:ssl_algs.c:(.text+0x1e): undefined reference to `EVP_idea_cbc'
【问题讨论】:
-
需要更多信息。但是,我的构建中有 libssl.a libcrypto.o(我正在构建跨平台并需要目标特定构建)并且只是正常链接。链接行中有 -lm -ldl 吗?我需要查看缺少哪些符号才能猜出您未链接的内容。
-
@PAntoni .. 感谢您的回复。我的第一个疑问是“您认为将 libcrypto.a 和 libssl.a 从 /usr/local/ssl/lib 复制到我的项目 lib 文件夹中的正确程序吗?或者我是否需要像 ln -s
-
这是我在 make 文件中添加的行 italic bold '# Common libraries COM_LIB=-ldl -lpthread -ltdapi ../septel/ gctlib.lib ../lib/libpq.a \ ../asn1/lib/libasn1per.a \ ../mysql/lib/libmysqlclient.a ../lib/libcrypto.a ../lib/libssl.a\ ../asn1/lib/libasn1rt.a -lm -lcrypt -lcrypto -lssl '
-
好的,你的构建行包含了 libssl 和 libcrypto 两次。一旦明确(../lib/libssl.a 和更高版本 -ssl - libcrypto 相同),您应该执行 -L ../lib 然后 -lssl。如果您使用 gcc,那可能是您的问题。否则,您可以在库列表周围尝试
-Wl, start-group <your library list> -Wl, end-group,以便 GCC 正确查找符号。我确实需要查看您的错误,未定义的符号可能会告诉您缺少哪些库。 -
PS:你不需要在你的构建树中有 libssl.a libcrypto.a。除非您正在做跨平台的工作,否则您的树中应该有正确的版本(或者更好地获取 SSL 源并为您的目标构建它)。
标签: c ssl openssl linker-errors