Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openssl 对“COMP”的未定义引用_zlib@libcrypto.so.10';(及其他)_Openssl_Redhat - Fatal编程技术网

Openssl 对“COMP”的未定义引用_zlib@libcrypto.so.10';(及其他)

Openssl 对“COMP”的未定义引用_zlib@libcrypto.so.10';(及其他),openssl,redhat,Openssl,Redhat,我正在开发Red Hat Enterprise Linux Server 7.0版(Maipo)。服务器提供OpenSSL 1.0.1。我在尝试链接到OpenSSL时遇到了很多加密错误 这是我的链接命令行(命令行中的顺序): 以下是一些错误: /lib64/libssl.so.10: undefined reference to `COMP_zlib@libcrypto.so.10' /lib64/libssh2.so.1: undefined reference to `EVP_get_cip

我正在开发Red Hat Enterprise Linux Server 7.0版(Maipo)。服务器提供OpenSSL 1.0.1。我在尝试链接到OpenSSL时遇到了很多加密错误

这是我的链接命令行(命令行中的顺序):

以下是一些错误:

/lib64/libssl.so.10: undefined reference to `COMP_zlib@libcrypto.so.10'
/lib64/libssh2.so.1: undefined reference to `EVP_get_cipherbyname@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `X509_STORE_free@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `BIO_clear_flags@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `d2i_KRB5_AUTHENT@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `MD5_Transform@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `X509_VERIFY_PARAM_set_depth@libcrypto.so.10'
/lib64/libssh2.so.1: undefined reference to `DSA_do_verify@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `SHA384_Init@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `PEM_ASN1_read_bio@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `FIPS_mode@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `OBJ_find_sigid_algs@libcrypto.so.10'
/lib64/libssh2.so.1: undefined reference to `BN_bn2bin@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `EVP_rc2_40_cbc@libcrypto.so.10'
/lib64/libssl.so.10: undefined reference to `sk_num@libcrypto.so.10'
...
当我跑步时:

ll /usr/lib64/libcrypto.so
我越来越

/usr/lib64/libcrypto.so -> libcrypto.so.1.0.1e
运行时:

objdump -tT /usr/lib64/libcrypto.so.1.0.1e | grep COMP_zlib
我明白了

000000000013e500 g    DF .text  0000000000000002  libcrypto.so.10 COMP_zlib_cleanup
000000000013e460 g    DF .text  000000000000009e  libcrypto.so.10 COMP_zlib
这意味着我把它放在这个图书馆里。 最奇怪的是,它能够在redhat 6.5/4中链接,但在redhat高于7时失败。
有什么建议吗

函数,如
COMP_zlib
EVP_get_cipherbyname
是OPenSSL SSL库的一部分,而不是加密库。您有
-lcrypto
,但似乎缺少
-lssl

g++ -g -O2 -Wl,-rpath -o output file1.o  libprivate_lib1.so -Lprivate_path -llib1 -ldl \
-lpthread -llib2 -lexpat -lgtest -lgtest_main -lboost_regex -lboost_filesystem -llzma \
-lcrypto private_lib2.so private_lib3.so -llib3
您应该更改为
-lssl-lcrypto

g++ -g -O2 -Wl,-rpath -o output file1.o  libprivate_lib1.so -Lprivate_path -llib1 -ldl \
-lpthread -llib2 -lexpat -lgtest -lgtest_main -lboost_regex -lboost_filesystem -llzma \
-lssl -lcrypto private_lib2.so private_lib3.so -llib3
如果
private_lib2.so private_lib3.so
依赖于OpenSSL,则需要在它们之后移动
-lssl-lcrypto
。也就是说,使用
private\u lib2.so private\u lib3.so-lssl-lcrypto

而且
libssh
必须继续
-lssl-lcrypto
。我看不出它被链接到了哪里,但是这个库的名字可能不同。最后,您可能会发现使用库列表
-lssl-lcrypto-llzma-pthread

它也可能是OpenSSL的更新版本或不同版本,但其配置不同。例如,它看起来像是Red Hat删除了压缩(
/configure no comp…
),但标头引入了类似
comp\u zlib
的符号

我想你的下一步是:(1)显示一个典型的编译命令,(2)提供
g++-v
,这样我们就可以看到标题搜索路径

最后要记住的一件事是,您使用的是
g++
,因此默认情况下与be
extern“C++”
链接。它可能是缺少惯用的OpenSSL标头之一:

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}
#endif

我没有访问Red Hat服务器的权限,所以我不确定。我使用CentOS和Fedora测试了另一个库,但我知道有时会存在差异。
COMP_zlib
EVP_get_cipherbyname
等函数是OPenSSL库的一部分,而不是加密库。您有
-lcrypto
,但似乎缺少
-lssl

g++ -g -O2 -Wl,-rpath -o output file1.o  libprivate_lib1.so -Lprivate_path -llib1 -ldl \
-lpthread -llib2 -lexpat -lgtest -lgtest_main -lboost_regex -lboost_filesystem -llzma \
-lcrypto private_lib2.so private_lib3.so -llib3
您应该更改为
-lssl-lcrypto

g++ -g -O2 -Wl,-rpath -o output file1.o  libprivate_lib1.so -Lprivate_path -llib1 -ldl \
-lpthread -llib2 -lexpat -lgtest -lgtest_main -lboost_regex -lboost_filesystem -llzma \
-lssl -lcrypto private_lib2.so private_lib3.so -llib3
如果
private_lib2.so private_lib3.so
依赖于OpenSSL,则需要在它们之后移动
-lssl-lcrypto
。也就是说,使用
private\u lib2.so private\u lib3.so-lssl-lcrypto

而且
libssh
必须继续
-lssl-lcrypto
。我看不出它被链接到了哪里,但是这个库的名字可能不同。最后,您可能会发现使用库列表
-lssl-lcrypto-llzma-pthread

它也可能是OpenSSL的更新版本或不同版本,但其配置不同。例如,它看起来像是Red Hat删除了压缩(
/configure no comp…
),但标头引入了类似
comp\u zlib
的符号

我想你的下一步是:(1)显示一个典型的编译命令,(2)提供
g++-v
,这样我们就可以看到标题搜索路径

最后要记住的一件事是,您使用的是
g++
,因此默认情况下与be
extern“C++”
链接。它可能是缺少惯用的OpenSSL标头之一:

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}
#endif

我没有访问Red Hat服务器的权限,所以我不确定。我使用CentOS和Fedora测试了另一个库,但我知道有时会存在差异。

问题还不清楚,可能有很多潜在原因。我们甚至不知道您正在尝试链接什么,或者正在使用哪些工具的版本,以及如何使用它们(例如CLI args),等等。也许您忘记链接到libcrypto了?在链接到libssl的标志之后添加
-lcrypto
链接标志。或者,您可能正试图链接在与Red Hat 7.0不兼容的机器上编译的某个不兼容的库。无论如何,详细描述您的问题是一个好主意,例如,向我们展示您运行的生成此输出的实际命令。我正在链接crypto lib(添加了命令行)。我认为这与Redhat7有关。因为它能够在redhat 6.5/4上编译。问题还不清楚,可能有很多潜在原因。我们甚至不知道您正在尝试链接什么,或者正在使用哪些工具的版本,以及如何使用它们(例如CLI args),等等。也许您忘记链接到libcrypto了?在链接到libssl的标志之后添加
-lcrypto
链接标志。或者,您可能正试图链接在与Red Hat 7.0不兼容的机器上编译的某个不兼容的库。无论如何,详细描述您的问题是一个好主意,例如,向我们展示您运行的生成此输出的实际命令。我正在链接crypto lib(添加了命令行)。我认为这与Redhat7有关。因为它可以在redhat 6.5/4上编译。