c呼叫c++動態庫,靜態庫
1 #include
2 using namespace std;
34 class paul
5 ;10
11 int paul::add(int a,int b)
12 17
18 extern "c" //
如果沒有則不行;
19 25 }
1 #include
2 extern void callfunc();//
要被外部函式呼叫;
3 int main()
4 靜態庫:
# g++ -c paullib.cpp
# ar –cr slib paullib.o
#gcc -o paul paul.c -l. slib -lstdc++ //注意這個程式還是要呼叫c++的庫函式,加上-lstdc++就可以了
注意:nm slib看一下:
動態庫:
[root@localhost 08-14]# g++ paullib.cpp -fpic -shared -o libpaul.so
[root@localhost 08-14]# cp libpaul.so /lib
[root@localhost 08-14]# gcc paul.c -l. -lpaul -o paul
注意:-lpaul不要寫錯了;
[root@localhost 08-14]# nm libpaul.so
00001cd4 a __bss_start
00000944 t callfunc //注意callfunc後面沒有v,如果沒有加extern 「c」 則有
00000864 t call_gmon_start
00001cd4 b completed.1
00001c80 d __ctor_end__
00001c78 d __ctor_list__
u __cxa_atexit@@glibc_2.1.3
w __cxa_finalize@@glibc_2.1.3
不加extern 「c」
00001b9c d p.0
000009ee t __tcf_0
0000099a t _z41__static_initialization_and_destruction_0ii
00000948 t _z8callfuncv
00000934 t _zn4paul3addeii
u _znsolsei@@glibcpp_3.2
u _znsolsepfrsos_e@@glibcpp_3.2
u _znst8ios_base4initc1ev@@glibcpp_3.2
u _znst8ios_base4initd1ev@@glibcpp_3.2
u _zst4cout@@glibcpp_3.2
c 呼叫靜態庫和動態庫
呼叫靜態庫 第一步把動態庫放到檔案裡 第二部連線上靜態庫 pragma comment lib,靜態庫.lib 呼叫動態庫 第一步 typedef int getmaxnum int,int 定義乙個函式指標型別 第二部 載入 dll hmodule hmodule loadlibrary mydl...
cgo中呼叫C動態庫 靜態庫
include include include 包含header的目錄 cgo cflags i home leen header l指定所在目錄,支援絕對 相對路徑,l指定類庫名稱 去掉前面的lib及後面的.so,如libusbkey.so為 lusbkey 靜態庫方式 字尾名為.a 編譯時庫內容...
c 靜態庫動態庫
靜態庫 gcc c a.cpp o a.o gcc c b.cpp o b.o ar rcs libmylib.a a.o b.o 使用庫 2種方式 1 gcc test.c o test l 指定庫路徑 i 大寫i 頭檔案目錄 l 庫名字,去除前字尾 2 將庫和標頭檔案拷貝到 usr lib下面 ...