linuxopenssl编译动态库
A. openssl怎么编译成动态库
1、静态编译
./Configure linux-elf-arm -DB_ENDIAN linux:'armeb-linux-gcc -mbig-endian' --prefix=$(pwd)/OpenSSL
a、 将openssl-0.9.8d/crypto/bio/bss_file.c中以下代码注释掉
//#ifndef _FILE_OFFSET_BITS
//#define _FILE_OFFSET_BITS 64
//#endif
#endif
b、 报错没有timeb.h时,在报错的.c文件中#undef TIMEB
c、 去掉openssl顶层Makefile中“build_all:”后面的 build_app build_test (我们要的只是两个静态库libcrypto.a和libssl.a),并去掉”DIRS=”后面的app和tests。
make && make install
2、动态库
1.config:
#config no-asm --prefix=../OpenSSL
2.改Makefile
1) CC= gcc 改成 CC = armeb-linux-gcc;
2) 删除 CFLAG= 中的 “-march=pentium”;
3) AR=ar $(ARFLAGS) r 改为 AR=armeb-linux-ar $(ARFLAGS) r;
4) ARD=ar $(ARFLAGS) d 改为 ARD=armeb-linux-ar $(ARFLAGS) d;
5)RANLIB= /usr/bin/ranlib 改为 RANLIB= armeb-linux-ranlib;
3.编译
#make
#make install
B. 在安装openssl时,编译动态链接库的时候,出现了以下错误,求大神帮忙解决!!!
编译OpenSSL不要在CMD下面编译,应该尽量在Visual Studio自带的32或64位命令行编译环境中编译,要不然会报各种错误。
C. linux中编译时怎么连接动态库
Linux系统中静态库是.a文件,编译链接.a文件只需要加上.a文件的完整路径就可以了,比如:
gcc -o hello hello.c /usr/lib/libm.a
Linux系统的动态库是.so文件,编译链接动态库需要用-L参数指定动态库的搜索路径,还要用-l(这个是小写的L)指定动态库的名字,比如:
gcc -o hello hello.c -L/usr/openssl/lib -lcrypto
D. linux 编译怎么连接动态库
Linux的动态库文件是以lib字样开头的.so文件,编译链接动态库有两个要点:一个是需要用-L选项指定动态库的搜索路径,这个搜索路径是需要连接的so文件的大致路径,比如/usr/openssl/lib;另外还需要用-l(这个是小写的L)选项指定动态库的名字,比如下面这条编译命令:
gcc -o hello hello.c -L/usr/openssl/lib -lcrypto
E. 编译安装openssl时使用参数zlib-dynamic和zlib有什么区别
./config shared zlib./config shared zlib-dynamic
一个是静态链接,一个是动态库,windows下为dll,linux为啥来着我也忘了。
这个参数的意思是,openssl应该使用哪个方式来获取zlib依赖。如果你全局安装了zlib-devel,那么选择zlib-dynamic即可。
如果你选择zlib,可能需要配置zlib-src,也就是zlib的源码让openssl可以将其静态编译到自己体内。
F. linux下如何编译安装openssl模块请高手详细解答一下。。。。。。。。。。【】【】
1$ tar zxvf openssl-0.9.8k.tar.gz -C /opt/
2$ ./config --prefix=/usr/local/ssl-0.9.8lk shared zlib-dynamic enable-camellia --prefix=/usr/local/ssl-0.9.8lk
3$ ./config -t
4$ make depend
5$ make
6$ make test
7$ make install
/********************************************************************/
附加: 为了ssl
a:$ /usr/local/ssl-0.9.8lk/ssl
b:$ vi openssl.cnf
default_bits = 1024
改 default_bits = 8192//为了安全最好改为4096以上的数据
c:$ countryName = Country Name (2 letter code)
改 countryName = CN //只能使用2字母的国家代码
d:$ countryName_default = AU
改countryName_default = Beijing
= Beijing //省份或直辖市名称
/**********************************************************************/
8$ a)cd /usr/local
b)ln -s ssl-0.9.8lk ssl
9$ a)cd /etc/ld.so.conf.d
b)cp -r /usr/local/ssl-0.9.8lk/lib/ ./
10$ cd /etc
vi ld.so.conf
加入:/usr/local/ssl-0.9.8lk/lib
11$ cd /usr/local/ssl-0.9.8lk/lib
ldconfig
12$ vi /root/.bash_profile
另外一个终端:echo $PATH 把PATH显示路径加入到.bash_profile里
例如: PATH=$PATH:/usr/local/ssl-0.9.8lk/bin$HOME/bin
13$ source ~/.bash_profile
14$ cd /usr/local/
15$ ldd /usr/local/ssl-0.9.8lk/bin/openssl
16$ which openssl
17$ openssl version
G. 新手:Linux下使用第三方C库(openssl),是调用.so文件还是直接调用.h文件
不管什么库文件,你都既要在包含.h文件(不然编译通不过:有未声明的函数),也要在gcc选项里面指定.so文件的位置(不然链接通不过:未知的符号)
比如
gcc -I include_path -L lib_path -lyourlib
include_path改成你头文件的目录
lib_path改成你动态库文件的目录
-lyourlib 改成l加上你要引用的库文件名字
比如libpthread.so就改成-lpthread
H. linux下编译android版本的openssl动态库带有dwarf调试信息,求教怎么编译不带dwarf调试信息的动态库
编译的时候是不能调试的哦,调试只能在编译好之后,VC中默认DEBUG模式,在编译时加入调试信息,然后按下F5即可进行调试,F9下断点,F10单步跳过, F11单步跟入...SHIFT F5停止调试。。
I. Linux下的静态库和动态库
linux下的静态库和动态库1.制作自己的动态库和静态库linux下动态库以.so结尾,静态库以.a结尾,它们都以lib开头,比如一个库名为net,那么它的全名应该是libnet.so或者libnet.a。我们有两个文件,hello.c和test.c,下面是两个文件的内容//hello.c
www.shiwu.com
#include
<stdio.h>void
my_lib_func(){printf(Library
routine
called/r/n);}//test.c#include
<stdio.h>
www.shiwu.com
int
main(){my_lib_func();return
1;}test.c调用了hello.c的方法,我们把hello.c封装成库文件。无论是静态库还是动态库,都是由.o文件组成,我们先把gcc
-c
hello.c生成.o文件制作静态库ar
crv
libmyhello.a
hello.o,ar是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库
可以看到已经有了Library
routine
called的结果,说明调用成功了。下面我们删除libmyhello.a,看看程序是否还是运行正常
我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中制作动态库
www.shiwu.com
我们看见动态库libmyhello.so已经生成,下面继续使用
找不到库文件,这个时候我们把so文件拷贝到/usr/lib下面
运行成功2.动态库和静态库同时存在的调用规则我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数-l,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。
我们同时存在libmyhello.a和libmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库作者
梨树阳光