我已经从源代码构建了OpenSSL(一个故意的旧版本;用它构建./config && make && make test)并且更愿意使用我构建的内容而不用make install链接我的程序.
失败的命令是:
gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto
-Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o`
Run Code Online (Sandbox Code Playgroud)
我收到一系列类似的错误:
common.c:(.text+0x1ea): undefined reference to `SSL_write'
Run Code Online (Sandbox Code Playgroud)
这让我觉得我的OpenSSL有点时髦.如果我-Lopenssl/openssl-0.9.8k/从命令中省略,则错误将更改为无法:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
Run Code Online (Sandbox Code Playgroud)
我是否错误地编译了OpenSSL?或者我该如何最好地解决这个问题?
我有 Ubuntu 14.04。它附带了 openssl 1.0.1f。我想安装另一个openssl版本(1.0.2)并且我想自己编译它。
我将其配置如下:
LDFLAGS='-Wl,--export-dynamic -L/home/myhome/programs/openssl/i/lib
-L/home/myhome/programs/zlib/i/lib'
CPPFLAGS='-I/home/myhome/programs/openssl/i/include
-I/home/myhome/programs/zlib/i/include'
./config --prefix=/home/myhome/programs/openssl/i \
zlib-dynamic shared --with-zlib-lib=/home/myhome/programs/zlib/i/lib \
--with-zlib-include=/home/myhome/programs/zlib/i/include
make
make install
Run Code Online (Sandbox Code Playgroud)
安装后,当我用 检查二进制文件时ldd openssl,结果是:
...
libssl.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libssl.so.1.0.0 (0x00007f91138c0000)
libcrypto.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libcrypto.so.1.0.0 (0x00007f9113479000)
...
Run Code Online (Sandbox Code Playgroud)
看起来不错。但是当我检查 ldd 时libssl.so,结果是:
...
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fac70930000)
...
Run Code Online (Sandbox Code Playgroud)
它仍然使用系统版本的libcrypto。我尝试了不同的构建方法,但结果始终保持不变。
我的问题是如何以某种方式配置构建,使其可以对共享库的所有二进制和库依赖项进行硬编码LD_LIBRARY_PATH,而无需使用 或类似的东西。
我正在尝试链接libssl.a和libcrypto.aXCode命令行项目中的静态库[在Link Binary With Libraries下].我在搜索路径中包含了Openssl头文件.
编译成功但执行失败dyld: Library not loaded: /usr/local/ssl/lib/libcrypto.1.0.0.dylib.
当我静态链接它时,为什么它会寻找dylib?怎么解决这个问题?
任何帮助都会很明显.