|
最近开发了一个 支持https协议的web服务器,在linux下面编译执行都没有问题,但是移植到 uclinux下面遇到一个问题,很长时间都不能解决。哪位高手能帮帮我啊。 问题如下:
因为我需要在 程序中使用open ssl库,因此我首先需要编译 openssl库,这个工作已经成功,编译方法方法如下:
将openssl库减压到 lib/libssl,修改它的Makefile,
-CC= cc
+CC= arm-elf-gcc
-AR=ar $(ARFLAGS) r
-RANLIB= /usr/bin/ranlib
+AR=arm-elf-ar $(ARFLAGS) r
+RANLIB= arm-elf-ranlib
-DIRS= crypto ssl $(SHLIB_MARK) apps test tools
+DIRS= crypto ssl $(SHLIB_MARK)
+
+romfs:
+
这样 openssl库编译成功,我的应用程序在linux下面编译运行都是正常的,移植到uclinux
的时候编译是对的,但是运行的时候不对。于是我写了测试文件,这个文件这有如下内容
#include <openssl/ssl.h>
#include <openssl/err.h>
int main()
{
char * certfile;
char* cipher = (char*) 0;
SSL_CTX* ssl_ctx;
static SSL* ssl;
printf("SSL_load_error_strings();\n");
SSL_load_error_strings();
printf("SSLeay_add_ssl_algorithms();\n");
SSLeay_add_ssl_algorithms();
printf(" SSL_CTX_new\n");
ssl_ctx = SSL_CTX_new( SSLv23_server_method() );
}
makefile如下
#CFLAGS += -DUSE_SSL $(INCSSL)
CFLAGS += $(INCSSL)
EXTRALIBS += $(LIBSSL) $(LIBCRYPTO) #-lRSAglue
EXTRALIBS += -L$(ROOTDIR)/lib/$(LIBCDIR)/lib $(LIBCRYPT)
test: test.o
${CC} $(CFLAGS) ${LDFLAGS} -o $@ test.o ${EXTRALIBS} ${LDLIBS}
romfs:
$(ROMFSINST) /home/pandowdy.pem
$(ROMFSINST) /home/test
然后启动skyeye,到home目录 ./test 出现错误信息,
NumInstr 37072106, io_read_word unknown addr(0xfffffffc) = 0xffffffff
R 6,1,0,fffffffc,fffffffe,4,9f0000,11d4000,0,f0000,11d5fb8,11d5e74,11d5e08,11d5e5c,1015730,10108c8,C 60000093,S 0,0,80000093,80000093,0,0,0,M 13,B 3,E 0,I 0,P 1000020,T 0,L e5922000,D e59f2158,NumInstr 37480360, io_read_word unknown addr(0xfffffffc) = 0xffffffff
R 6,1,0,fffffffc,fffffffe,4,9f0000,11d4000,0,f0000,11d5e30,11d5cec,11d5c80,11d5cd4,1015730,10108c8,C 60000093,S 0,0,60000093,80000093,0,0,0,M 13,B 3,E 0,I 0,P 1010af4,T 0,L 10e35d0,D eb001777,NumInstr 38128025, io_read_word unknown addr(0xfffffffc) = 0xffffffff
一直是这样的信息往下跳,只到我按ctrl+c,我debug发现是执行到函数 SSLeay_add_ssl_algorithms()的时候出错的。这个错误我感觉是内存方面的错误,io_read_word 等错误信息应该是skyeye里面打印出来的,哪位高手能告诉我问题出在哪里了吗?是skyeye的bug吗? |
|