Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何消除--openssl错误_Openssl_Embedded Linux - Fatal编程技术网

如何消除--openssl错误

如何消除--openssl错误,openssl,embedded-linux,Openssl,Embedded Linux,我已经编译并安装了openssl。为了检查软件包是否安装正确,我运行以下程序。它为我正确编译和运行表示openssl已正确安装&未损坏 #include <openssl/engine.h> #include <openssl/evp.h> #include <openssl/err.h> int main(int c, char **v) { ERR_load_crypto_strings(); OpenSSL_add_all_algori

我已经编译并安装了openssl。为了检查软件包是否安装正确,我运行以下程序。它为我正确编译和运行
表示openssl已正确安装
&未损坏

#include <openssl/engine.h>
#include <openssl/evp.h>
#include <openssl/err.h>

int main(int c, char **v)
{
    ERR_load_crypto_strings();
    OpenSSL_add_all_algorithms();
    ENGINE_load_builtin_engines();
    ENGINE_register_all_complete();
    puts("Stuff seems okay.");
    return 0;
}
(It build okay with "gcc -Wall -lcrypto test.c -o test"  
 Also run fines )
#包括
#包括
#包括
int main(int c,字符**v)
{
错误加载加密字符串();
OpenSSL_添加_所有算法();
发动机负载内置发动机();
发动机注册器全部完成();
放置(“东西似乎没问题。”);
返回0;
}
(通过“gcc-Wall-lcrypto test.c-o test”可以构建)
(也要罚款)
现在我有了一个使用openssl库的程序。这里我得到了这个错误。若软件包安装正确,那个么为什么在运行时会出现错误。我使用的openssl函数是否有一些我遗漏的依赖项:---

openssl需要TOR吗?此链接表示导致类似错误:--

md5.cpp:---

#包括
#包括
#包括“md5.h”
//////////////////////////////////////////////////////////////////////
//建造/销毁
//////////////////////////////////////////////////////////////////////
Cmd5::Cmd5(无效)
{
*m_=0;
}
Cmd5::Cmd5(未签名字符*pstr)
{
文摘(pstr);
}
Cmd5::~Cmd5()
{
}
///////////////////////////////////////////////////////////////////////////////
//消化
//
char*Cmd5::摘要(无符号char*pstr)
{
执行副总裁MD CTX mdctx;
工程执行副总裁(总经理)总经理(总经理);;
无符号字符md_值[EVP_MAX_md_SIZE];
无符号整数md_len;
OpenSSL_添加_所有_摘要();
md=EVP_get_digestbyname(“md5”);
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx,md,NULL);
EVP_DigestUpdate(&mdctx、pstr、strlen((常量字符*)pstr));
EVP_DigestFinal_ex(&mdctx、md_值和md_len);
EVP_MD_CTX_清理(&mdctx);
斯普林特(m_szDigest,
%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\0“,
md_值[0],md_值[1],md_值[2],md_值[3],md_值[4],md_值[5],md_值[6],md_值[7],
md_值[8]、md_值[9]、md_值[10]、md_值[11]、md_值[12]、md_值[13]、md_值[14]、md_值[15];
返回m_szDigest;
}
md5.h:---

#包括
Cmd5类
{
公众:
/*!
默认构造函数
*/
Cmd5(无效);
/*!
建造师
@要加密的参数pstr字符串。
*/
Cmd5(无符号字符*pstr);
/*!
析构函数
*/
virtual~Cmd5();
/*!
执行MD5
@要加密的参数pstr字符串。
@返回加密数据。
*/
字符*摘要(无符号字符*pstr);
/*!
执行MD5
@返回加密数据。
*/
char*getDigest(void){返回m_szDigest;};
私人:
/*!
MD5数据
*/
char m_szDigest[128];
};
错误:----

pi@raspberrypi~$gdb vscpd
gdb:/usr/local/lib/libcrypto.so.1.0.0:没有可用的版本信息(由/usr/lib/libpython2.7.so.1.0要求)
gdb:/usr/local/lib/libssl.so.1.0.0:没有可用的版本信息(由/usr/lib/libpython2.7.so.1.0要求)
GNU gdb(gdb)7.4.1-debian
版权所有(C)2012免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“arm linux gnueabihf”。
有关错误报告说明,请参阅:
...
从/home/pi/vscpd读取符号…完成。
(gdb)主断路器
0xdd30处的断点1:文件vscpd.cpp,第99行。
(gdb)运行
启动程序:/home/pi/vscpd
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/armlinux gnueabihf/libthread_db.so.1”。
程序收到信号信号,指令非法。
0x4025f7a0在/usr/local/lib/libcrypto.so.1.0.0中的_armv7_neon_probe()中
(gdb)英国电信
#来自/usr/local/lib/libcrypto.so.1.0.0的0 0x4025f7a0 in_armv7_neon_probe()
#1 0x4025bdc4,位于/usr/local/lib/libcrypto.so.1.0.0中的OPENSSL_cpuid_设置()中
#2 0x4000f250英寸??()来自/lib/ld linux armhf.so.3
#3 0xBEFF858英寸??()
#4 0xBEFF858英寸??()
反向跟踪停止:上一帧与此帧相同(堆栈损坏?)
(gdb)调试2:客户端\检查\窗口\更改:更改
调试2:通道0:请求窗口更改确认0
(gdb)

请说明导致此错误的原因?

尝试设置环境变量OPENSSL\u armcap=0以禁用该代码

OPENSSL_cpuid_安装程序中的代码假定它可以捕获SIGILL并在指令无法执行时继续。 您只需在gdb中继续,OPENSSL_cpuid_安装程序中的处理程序应该允许它通过,并且应该可以正常工作

您通常(为此)会在gdb中使用类似以下的内容来实现这一点:

处理SIGILL通行证


Tim.

尝试设置环境变量OPENSSL\u armcap=0以禁用该代码

OPENSSL_cpuid_安装程序中的代码假定它可以捕获SIGILL并在指令无法执行时继续。 您只需在gdb中继续,OPENSSL_cpuid_安装程序中的处理程序应该允许它通过,并且应该可以正常工作

您通常(为此)会在gdb中使用类似以下的内容来实现这一点:

处理SIGILL通行证


Tim.

谢谢…handle SIGILL pass--command&--continue在gdb工作--然后我可以单步执行程序--设置环境变量的命令是什么。。。它应该在我的.bashrc文件中吗?也可以在我..时禁用此错误。。编译openssl。。i、 e在制造时间?谢谢…handle SIGILL pass--command&--continue在gdb工作--然后我可以单步执行程序--设置环境变量的命令是什么。。。它应该在我的.bashrc文件中吗?也可以在我..时禁用此错误。。编译openssl。。i、 e在制造时间?
#include <stdio.h>
#include <openssl/evp.h>

#include "md5.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Cmd5::Cmd5( void )
{
    *m_szDigest = 0;
}

Cmd5::Cmd5( unsigned char *pstr )
{
    digest( pstr );
}

Cmd5::~Cmd5()
{

}

///////////////////////////////////////////////////////////////////////////////
// digest
//

char *Cmd5::digest( unsigned char *pstr )
{

    EVP_MD_CTX mdctx;
  const EVP_MD *md;
    unsigned char md_value[EVP_MAX_MD_SIZE];
  unsigned int md_len;

    OpenSSL_add_all_digests();

    md = EVP_get_digestbyname("md5");
    EVP_MD_CTX_init( &mdctx );
  EVP_DigestInit_ex( &mdctx, md, NULL );
  EVP_DigestUpdate( &mdctx, pstr, strlen( (const char *)pstr ) );
  EVP_DigestFinal_ex( &mdctx, md_value, &md_len );
  EVP_MD_CTX_cleanup( &mdctx );

    sprintf( m_szDigest, 
        "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\0",
        md_value[0],md_value[1],md_value[2],md_value[3],md_value[4],md_value[5],md_value[6],md_value[7],
        md_value[8],md_value[9],md_value[10],md_value[11],md_value[12],md_value[13],md_value[14],md_value[15] ); 


    return m_szDigest;

}
#include <openssl/md5.h>

class Cmd5
{

public:

    /*!
        Default constructor
    */
    Cmd5( void );

    /*!
        Constructor
        @param pstr string to encrypt.
    */
    Cmd5( unsigned char *pstr );

    /*!
        Destructor
    */
    virtual ~Cmd5();

    /*!
        Perform MD5
        @param pstr string to encrypt.
        @return Encrypted data.
    */
    char *digest( unsigned char *pstr );

    /*!
        Perform MD5
        @return Encrypted data.
    */
    char *getDigest( void ) { return m_szDigest; };

private:

    /*!
        MD5 data
    */
    char m_szDigest[128];
};
pi@raspberrypi ~ $ gdb vscpd
gdb: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/lib/libpython2.7.so.1.0)
gdb: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/lib/libpython2.7.so.1.0)
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/pi/vscpd...done.


(gdb) break main
Breakpoint 1 at 0xdd30: file vscpd.cpp, line 99.


(gdb) run
Starting program: /home/pi/vscpd 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0x4025f7a0 in _armv7_neon_probe () from /usr/local/lib/libcrypto.so.1.0.0



(gdb) bt
#0  0x4025f7a0 in _armv7_neon_probe () from /usr/local/lib/libcrypto.so.1.0.0
#1  0x4025bdc4 in OPENSSL_cpuid_setup () from /usr/local/lib/libcrypto.so.1.0.0
#2  0x4000f250 in ?? () from /lib/ld-linux-armhf.so.3
#3  0xbefff858 in ?? ()
#4  0xbefff858 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) debug2: client_check_window_change: changed
debug2: channel 0: request window-change confirm 0
(gdb)