靜態(tài)庫特點(diǎn)
運(yùn)行不存在
靜態(tài)庫源碼被鏈接到調(diào)用程序中
目標(biāo)程序的歸檔
C語言靜態(tài)庫
C靜態(tài)庫的創(chuàng)建
1.創(chuàng)建一個靜態(tài)庫項目
2.添加庫程序,源文件使用C文件
C靜態(tài)庫的使用
庫路徑設(shè)置:可以使用pragma關(guān)鍵字設(shè)置
#pragma comment(lib,“./lib/clib.lib”)
C語言方法
//clib.c
int Clib_add(int x,int y)
{return x+y;
}
int Clib_sub(int x,int y)
{return x - y;
}
//useclib.c
#include#include#pragma comment(lib,"../debug/Clib.lib")
int main()
{int sum = 0;
int sub = 0;
sum = Clib_add(5,3);
sub = Clib_sub(5,3);
printf("sum = %d\nsub = %d\n",sum,sub);
system("pause");
return 0;
}
C語言函數(shù)名:_Clib_add和_Clib_sub
C++方法
//cpplib.cpp
int Clib_add(int x,int y)
{return x+y;
}
int Clib_sub(int x,int y)
{return x - y;
}
//usecpplib.cpp
#include#include#pragma comment(lib,"../debug/cpplib.lib")
int Clib_add(int,int);
int Clib_sub(int,int);
int main()
{int sum = 0;
int sub = 0;
sum = cpplib_add(5,3);
sub = cpplib_sub(5,3);
printf("sum = %d\nsub = %d\n",sum,sub);
system("pause");
return 0;
}
以上代碼的區(qū)別在于C語言不需要函數(shù)聲明,但C++使用函數(shù)前需要聲明
C++語言函數(shù)名:?Clib_add@@YAHHH@Z和?Clib_sub@@YAHHH@Z
如果用c++程序調(diào)用C語言的靜態(tài)庫
原因是之前上學(xué)的時候老師講過一個段子:
現(xiàn)在我們要破解一個芯片代碼,我們有的源碼是C語言的,三十多看前的代碼了,現(xiàn)在公司的代碼都是用C++寫的,咋辦,把以前的方法都用C++來實現(xiàn)一遍?可以,有源代碼就可以,稍微花點(diǎn)時間就可以完成,不幸的是,寫源代碼的公司倒閉了,比較Bland公司,以前的代碼丟失了,咋辦?難道原來的lib靜態(tài)庫都不能用了么?
C++調(diào)用C語言的靜態(tài)庫時會報錯
方法在這里
extern “c”
{
int Clib_add(int,int);
int Clib_sub(int,int);
}
#include#include#pragma comment(lib,"../debug/clib.lib")
extern "C"
{int Clib_add(int,int);
int Clib_sub(int,int);
}
int main()
{int sum = 0;
int sub = 0;
sum = Clib_add(5,3);
sub = Clib_sub(5,3);
printf("sum = %d\nsub = %d\n",sum,sub);
system("pause");
return 0;
}
另外,多說一句,C語言調(diào)函數(shù)時,只檢查函數(shù)名正確就可以調(diào)用,因為C++有重載的概念,所以不但要檢查函數(shù)名,還要檢查函數(shù)的參數(shù)類型,導(dǎo)致函數(shù)在靜態(tài)庫中被調(diào)用時,無法正常使用只包含文件名信息的庫文件。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧