链接OpenSSL时对t1sl_steup_key_block的未定义引用

时间:2011-04-18 09:00:53

标签: c ssl openssl linker-errors

我遇到了将OpenSSL库链接到现有项目的问题。 我在哪里弄错了?

以下是我遵循的步骤。

我已下载SSL库,已配置并安装它。它安装在/usr/local/ssl

2)我已将libcrypto.alibssl.a/usr/local/ssl/lib复制到我的项目中,例如/mnt/linux/bla/bla/lib

3)然后我编辑了make文件并在那里添加了libssl libcrpto的路径。添加的路径是项目中的/mnt/linux/bla /bla

3)制作

4)通过光滑编辑构建项目

当它构建时,我会得到一个很长的错误链,比如

../lib/libssl.a(t1_enc.o) :In function 't1sl_steup_key_block: undefined ref

现在,我想将.a文件复制到项目中可能会有问题。是否有替代方案,或者我应该使用ln -s将.a文件从/usr/local/openssl/lib链接到我的项目库文件夹中?以下是错误。

   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'

2 个答案:

答案 0 :(得分:2)

您需要在makefile'

中添加标记-lssl-lcrypto

例如:

gcc somefile.c -o someprogram -lssl -lcrypto

答案 1 :(得分:2)

您是否尝试使用已安装在/ usr / lib目录中的libssl和libcrypto(假设您已为两者安装了dev软件包)?一旦使用默认安装编译并运行没有错误,您可以从源构建新的libssl / libcrypto(?),安装到usr / local,并使用库的usr / local版本进行重建。