如何告诉Qt使用不同的OpenSSL

时间:2016-11-04 18:10:11

标签: linux qt ssl openssl

我有Qt 4的linux:4.6.3-4 + squeeze1和openssl 0.9.8o-4squeeze14 openssl.0.9.8和openssl 1.0之间的通信存在问题:

Running curl with OpenSSL 0.9.8 against OpenSSL 1.0.0 server causes handshake error?

http://marc.info/?l=openssl-dev&m=136760073921954&w=2

我已经将openssl-1.0.2j构建到/ home / openssl但我无法使用此库制作Qt。 SSL是动态链接的,因此ldd my_program不会显示libssl。 我试过了

LD_LIBRARY_PATH=/home/openssl ./my_program

但它不起作用,我可以看到命令:

$ lsof -p 16126|grep -i ssl
ccbox-ccd 16126 root  mem    REG       80,5   310296  8389597 /usr/lib/i686/cmov/libssl.so.0.9.8
$ lsof -p 16126|grep -i crypt
ccbox-ccd 16126 root  mem    REG       80,5   469632 29365978 /usr/lib/libgcrypt.so.11.5.3
ccbox-ccd 16126 root  mem    REG       80,5   143180 29375951 /usr/lib/libk5crypto.so.3.1
ccbox-ccd 16126 root  mem    REG       80,1    38360  1104731 /lib/i686/cmov/libcrypt-2.11.3.so
ccbox-ccd 16126 root  mem    REG       80,5  1393308  8389598 /usr/lib/i686/cmov/libcrypto.so.0.9.8

总是使用0.9.8也编辑/etc/ld.so.conf没有帮助

如何指出Qt使用从不版本的openssl

最诚挚的问候 马立克

2 个答案:

答案 0 :(得分:1)

如果你可以重建你的应用程序(使用qmake / make)更好,并确保你通过运行

使用正确的openssl库
export LD_LIBRARY_PATH=Absolute_Path/openssl/lib
在构建之前

此外,您可以在运行应用程序之前使用相同的命令,即使您的应用程序是使用不同位置的openssl库构建的。但是,您需要确保新位置的openssl库的名称与应用程序根据ldd输出所需的名称相匹配。

答案 1 :(得分:0)

申请表ldd

ldd /home/ccbox-ccdns/ccbox-ccdns
        linux-gate.so.1 =>  (0xb7739000)
        libQtSql.so.4 => /usr/lib/libQtSql.so.4 (0xb76ef000)
        libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xb76aa000)
        libQtNetwork.so.4 => /usr/lib/libQtNetwork.so.4 (0xb757d000)
        libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb72f9000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb72e0000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb71eb000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb71c5000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb71a6000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb705f000)
        libz.so.1 => /usr/lib/libz.so.1 (0xb704b000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7047000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7042000)
        librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7039000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb6f6f000)
        /lib/ld-linux.so.2 (0xb773a000)
        libpcre.so.3 => /lib/libpcre.so.3 (0xb6f3c000)

我已经了解到使用qt的预编译包使用dlopen来访问openssl lib而不是共享lib。这就是为什么我无法使用不同版本的openssl。现在我用openssl编译新的qt