我正在尝试编译一个包含以下内容的小型.c文件:
#include <openssl/ssl.h>
#include <openssl/rsa.h>
#include <openssl/x509.h>
#include <openssl/evp.h>
Run Code Online (Sandbox Code Playgroud)
在我拥有.c文件的同一个文件夹中,我有一个/ openssl包含所有这些文件(以及更多),同样在synaptic包管理器中我看到安装了OpenSSL,我试图用这个编译:
gcc -o Opentest Opentest.c -lcrypto
Run Code Online (Sandbox Code Playgroud)
但我总是得到错误:
error: openssl/ssl.h: No such file or directory
error: openssl/rsa.h: No such file or directory
error: openssl/x509.h: No such file or directory
error: openssl/evp.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我想编译的文件只是一个.c文件,没有Makefile或./configure.
我已经尝试过:
env CFLAGS=-I/path/to/openssl/
Run Code Online (Sandbox Code Playgroud)
并尝试再次编译,但我得到相同的错误.
我应该怎么做才能用openssl编译包括?
我一直在尝试使用以下rpath编译openssl 1.0.0g:
$ORIGIN/../lib64
Run Code Online (Sandbox Code Playgroud)
每次我readelf -d apps/openssl,我得到的结果如下,取决于我尝试的逃避变化:
\RIGIN/../lib64
RIGIN/../lib64
ORIGIN/../lib64
Run Code Online (Sandbox Code Playgroud)
我想在不使用像chrpath这样的外部工具的情况下设置我的rpath.它可能吗?我基本上会接受任何不涉及使用像chrpath这样的外部工具的东西(虽然我已经完成了).
理想情况下,我想通过在命令行(任何形式-Wl,-rpath,$ORIGIN/../lib64)上传递选项来实现.
我不介意编辑生成的Makefile,这是我最后一次尝试的.如果我能打印出一个愚蠢的美元符号!我尝试在BUILDENV =块下修改LIBRPATH而没有运气.到目前为止我的最好成绩:
LIBRPATH=$$'ORIGIN/../lib64 # result: /../lib64
LIBRPATH=$$$$'ORIGIN/../lib64 # result: 12345<pid>/../lib64
Run Code Online (Sandbox Code Playgroud)
我已经阅读了各种与rpath相关的问题,并尝试了各种转义和引用技巧但到目前为止没有任何工作!
从源tarball构建时,由config&make命令生成的openssl二进制文件动态链接到以下库:
linux-vdso.so.1 => (0x00007fffa75fe000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff7f79ab000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff7f75e2000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff7f7bd2000)
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果我可以静态链接到lib gcc,则对其他共享库的依赖关系也将消失。
问题是如何获取配置脚本以生成静态链接的二进制文件?
在Windows上构建的过程也一样吗?
我想从源代码构建具有特定OpenSSL版本的某个OpenSSH版本,但是我收到以下错误:
mkdir /tmp/ssh
cp openssh-6.7p1.tar.gz /tmp/ssh
cp openssl-1.0.1l.tar.gz /tmp/ssh
cd /tmp/ssh
tar zxvf openssl-1.0.1l.tar.gz
cd openssl-1.0.1l
./config --prefix=/tmp/ssh
make
make install
cd ..
tar zxvf openssh-6.7p1.tar.gz
cd openssh-6.7p1
./configure --with-ssl-dir=/tmp/ssh --prefix=/tmp/ssh
...
checking openssl/opensslv.h usability... no
checking openssl/opensslv.h presence... no
checking for openssl/opensslv.h... no
configure: error: *** OpenSSL headers missing - please install first or check config.log ***
Run Code Online (Sandbox Code Playgroud)
openSSH的配置脚本中是否有错误或者我是否需要更改任何命令?
我正在尝试使用 OpenSSL 从 ac 程序计算 sha1 哈希。我正在 Mac OS X Yosemite 上使用 Intel i7(所以 64 位)使用 clang 进行编译。
相关的一段代码大致如下:
#include <openssl/evp.h>
...
unsigned char outHash[20];
hash("SHA1","abcd", 20, outHash);
Run Code Online (Sandbox Code Playgroud)
问题是,当使用来自 的“散列”函数时openssl/evp.h,使用 clang 进行编译会产生以下错误:
#include <openssl/evp.h>
...
unsigned char outHash[20];
hash("SHA1","abcd", 20, outHash);
Run Code Online (Sandbox Code Playgroud)
所以看起来链接器没有找到 OpenSSL(“哈希”函数未识别)。有想法该怎么解决这个吗?
编辑:
事实证明,我试图使用一个不存在的函数(“哈希”) - 抱歉误导您。
但是我仍然有同样的问题:包括openssl/evp.h似乎不起作用。
这是我正在使用的哈希函数,它使用 evp 来执行 sha1 编码:
unsigned int hash(const char *mode, const char* dataToHash, size_t dataSize, unsigned char* outHashed) {
unsigned int md_len = -1;
const EVP_MD *md = …Run Code Online (Sandbox Code Playgroud)