我想修改OpenSSL代码,然后在我的IDE(QTCreator
)中调试它。
我已经下载了OpenSSL源代码,根据./config
使用调试符号构建它,并将其部署在非系统文件夹中。但是,当我对库进行修改时,更改在调试程序中无效。
例如,我尝试修改握手过程并使用s_client
应用测试结果。然而,s_client
app指向OpenSSL的系统版本。即,s_client
包含<openssl/...>
(位于/usr/local/...
)。
我希望它指向openssl在不同文件夹中的刚安装/修改版本。虽然有一个问题。通过修改原始的OpenSSL makefile,我只想到了一个怎么做的方法,这个方法很庞大,而且任务看起来势不可挡。
有谁知道如何处理这个问题?请注意,我希望保持OpenSSL的系统版本可操作(符号链接不适用)。
我运行Ubuntu 16.04 LTS。 ldd /my/version/of/openssl
的输出是
linux-vdso.so.1 => (0x00007ffd9a3d6000)
libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f04523f8000)
libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f0451f6a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0451d4d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0451983000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f045177f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0452668000)
答案 0 :(得分:0)
在两个人的帮助下(见评论),我能够找出问题所在。首先,确保编译OpenSSL
并正确设置--prefix
和--openssl
目录。
安装OpenSSL后,您需要使用代码(OpenSSL
的应用)来调用/链接新版本的OpenSSL
。在QtCreator
中,您可以通过将LD_LIBRARY_PATH
设置为包含库文件libcrypto.so.1
和libssl.so.1
的目录来实现此目的。该设置在Projects -> Run environment -> (add LD_LIBRARY_PATH into system environment)
。
此外,您可以通过从终端输入带二进制文件和调用命令ldd ./openssl
的目录来手动检查二进制文件所调用的库。这样,您将看到调用哪些库(它应该是您自己的版本,而不是系统库)。此外,您可以从终端设置LD_LIBRARY_PATH
,可选地在其前面设置export
命令,以实现永久效果(持久的整个终端会话)。总的来说,你可以打电话
export LD_LIBRARY_PATH=/path/to/your/lib
。