最近才開始接觸linux系統(Ubuntu 9.10),有些東西容易忘記,備忘之,待續。
1.g++編譯問題
//main.cpp
#include?<iostream>
using?namespace?std;
//headers
void?show();
int?main()
{
????cout<<"library test function show():?";
????show();
????return?0;
}
//libtest.cpp
#include?<iostream>
using?namespace?std;
void?show()
{
????cout<<"hello?library?test!"<<endl;
}
靜態庫:
首先編譯libtest.cpp生成中間文件
libtest.og++ -c libtest.cpp
然后將其打包成靜態庫
staticlib.a
ar -rc staticlib.a libtest.o
最后使用靜態庫與main.cpp進行編譯得到執行文件
staticlib
g++ -o staticlib main.cpp staticlib.a
運行./staticlib 成功!!
動態庫:
首先同樣需要編譯生成中間文件
libteset.o,但一般加上-fPIC選項。
其意思是位置獨立代碼 ,指示編譯程序生成的代碼要適合共享庫的內容這樣的代碼能夠根據載入內存的位置計算內部地址
g++ -c -fPIC libtest.cpp
然后打包 生成動態庫
dynamiclib.sog++ -shared libtest.o -o dynamiclib.so
最后生成可執行文件dynamiclib
g++ -o dynamic main.cpp dynamiclib.so
運行./dynamiclib
結果出錯了,提示找不到動態庫。原因是linux下動態庫不像windows里那樣會自動尋找當前目錄下的dll,這需要把編譯出來的動態庫放到系統的 /usr/lib 或 /lib下才能運行程序。
或者還可以在編譯的時候就指定路徑也可以,例如在最后一步的時候:
g++ -o dynamic main.cpp
./dynamiclib.so
再次運行./dynamiclib 成功!!