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會優先選擇動態庫作者
梨樹陽光