C++ 在Qtcreator中使用共享对象时出现问题
我试图在图书馆中使用ESNI相关的方法。我使用.config&&make&&sudomakeinstall命令克隆并安装了库。安装在/usr/local/lib中的共享对象 首先,我使用nm命令检查了so文件中包含的我必须使用的函数(SSL_CTX_esni_server_enable)C++ 在Qtcreator中使用共享对象时出现问题,c++,shared-libraries,qt-creator,C++,Shared Libraries,Qt Creator,我试图在图书馆中使用ESNI相关的方法。我使用.config&&make&&sudomakeinstall命令克隆并安装了库。安装在/usr/local/lib中的共享对象 首先,我使用nm命令检查了so文件中包含的我必须使用的函数(SSL_CTX_esni_server_enable) pol4bear@pol4bear:~$ nm -D /usr/local/lib/libssl.so | grep -i esni 0000000000026bf0 T SSL_CTX_esni_server
pol4bear@pol4bear:~$ nm -D /usr/local/lib/libssl.so | grep -i esni
0000000000026bf0 T SSL_CTX_esni_server_enable
0000000000026aa0 T SSL_CTX_esni_server_flush_keys
0000000000026a60 T SSL_CTX_esni_server_key_status
0000000000028070 T SSL_CTX_get_esni
0000000000028030 T SSL_CTX_set_esni_print_callback
00000000000266a0 T SSL_esni_checknames
0000000000025ce0 T SSL_ESNI_dec
00000000000280d0 T SSL_ESNI_dup
0000000000026720 T SSL_esni_enable
0000000000024800 T SSL_ESNI_enc
0000000000028f80 T SSL_ESNI_ext_free
00000000000293a0 T SSL_ESNI_ext_print
00000000000212e0 T SSL_ESNI_free
0000000000028040 T SSL_ESNI_get_esni
0000000000029570 T SSL_ESNI_grease_me
0000000000021d50 T SSL_ESNI_new_from_buffer
0000000000023080 T SSL_ESNI_print
0000000000028ff0 T SSL_esni_query
0000000000029320 T SSL_ESNI_reduce
00000000000280b0 T SSL_ESNI_set_nonce
00000000000280a0 T SSL_ESNI_set_private
0000000000021880 T SSL_ESNI_wrap_keyshare
0000000000027e90 T SSL_get_esni_status
0000000000028020 T SSL_set_esni_print_callback
第二,我在Qtcreator中使用“addlibrary”添加了库,并尝试编译下面的代码,但由于“未定义引用'SSL\u CTX\u esni\u server\u enable'”而失败。我怎样才能修好它
#include <iostream>
#include <memory>
#include <openssl/ssl.h>
#include <openssl/esni.h>
using namespace std;
using SSL_CTX_ptr=std::unique_ptr<SSL_CTX, decltype(&SSL_CTX_free)>;
int main()
{
const SSL_METHOD *method = TLS_method();
SSL_CTX_ptr ssl(SSL_CTX_new(method), SSL_CTX_free);
SSL_CTX_esni_server_enable(ssl.get(), "~/esni/hellven1.priv", nullptr);
cout << "Hello World!" << endl;
return 0;
}
您能显示使用的编译命令吗?尝试添加
-Wl,--trace
以查看它是否选择了正确的libssl。那么
为什么要标记这个C?我使用./config&&make&&make install编译了这个库,就像libarary的安装所说的那样。我是否必须执行make-Wl,--trace来检查libssl.so是否正常?我在这个问题中删除了C标记。如果这让你不舒服,我很抱歉
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
unix:!macx: LIBS += -L$$PWD/../openssl/ -lssl
INCLUDEPATH += $$PWD/../openssl
DEPENDPATH += $$PWD/../openssl
unix:!macx: LIBS += -L$$PWD/../openssl/ -lcrypto
INCLUDEPATH += $$PWD/../openssl
DEPENDPATH += $$PWD/../openssl