C呼叫C 動態庫,靜態庫

2021-05-25 17:53:16 字數 1440 閱讀 8297

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下面 ...