在學習《多平臺應用與開發》的過程中,遇到了靜態鏈接庫和動態鏈接庫的學習,剛開始完全不知道講的是什麼,於是花了一個下午查閱資料、動手實驗,終於對它有了一點基本的瞭解,所以特意花點時間整理一下。
ps:靜態庫 (擴展名爲 .a 或 .lib) 是包含函數的文件,用於在link階段整合執行程序,動態鏈接庫(擴展名 .dll)是不在link階段整合進執行程序中的。DLL文件在執行階段動態調用。
一、創建C語言靜態鏈接庫
1.建立。
File->New->Projects->Static library->Go
給項目命名爲:static library
將main.c中的代碼修改爲:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int pow2(int a)
{
return a*a;
}
void upstr(char *str, char *s)
{
int i;
for(i = 0; i < strlen(str); i++)
{
if(str[i] >= 'a' && str[i] <= 'z')
s[i] = str[i] - 'a' + 'A';
else
s[i] = str[i];
}
s[i] = '\0';
}
2.編譯(Build)。
編譯完成後找到該project的的目錄文件,打開static library/bin/Debug 這時可以看到生成的libstatic library.a文件(Visual Studio中的後綴爲".lib")。
二、調用靜態鏈接庫
1.創建win32項目
File->New->Projects->Win32 GUI project->Go
給項目命名爲:test_lib
將main.cpp中的代碼修改爲:
#include <windows.h>
extern "C"
{
int pow2(int a);
void upstr(char *str, char *s);
}
int APIENTRY WinMain(HINSTANCE h1,HINSTANCE h2,LPSTR l,int n)
{
int x = 2;
char str[30]={"static library _win32"};
int t = pow2(x);
char *s = (char*)malloc(sizeof(strlen(str)));
upstr(str, s);
if(t == 4)
MessageBox(NULL, s ,TEXT("靜態鏈接庫測試"), MB_OK);
else
MessageBox(NULL, TEXT("error!!!") ,TEXT("靜態鏈接庫測試"), MB_OK);
return 0;
}
通常, Codeblocks並不知道庫文件被使用和它的位置,我們必須聲明庫文件,讓它在鏈接的時候不會出錯。
選擇菜單Settings->Compiler->Linker settings->Add 添加libstatic library.a庫文件。
3.編譯運行
添加完成後就可以編譯運行了,運行結果如下。
至此,就完成了靜態鏈接庫的創建和調用。