linux+vs2013編譯靜態庫和動態庫
Linux下創建與使用靜態庫
Linux靜態庫命名規則
Linux靜態庫命名規範,必須是"lib[your_library_name].a":lib為前綴,中間是靜態庫名,擴展名為.a。
創建靜態庫(.a)
(1) 將代碼文件編譯成目標文件.o(test.o)
命令:g++ -c test.cpp
(2) 通過ar工具將目標文件打包成.a靜態庫文件
命令:ar -crv libtest.a test.o
生成靜態庫test.a
使用靜態庫
Linux下使用靜態庫,只需要在編譯的時候,指定靜態庫的搜索路徑(-L選項)、指定靜態庫名(不需要lib前綴和.a後綴,-l選項)。
g++ test.cpp -L. -Itest
l -L:表示要連接的庫所在目錄
l -l:指定鏈接時需要的動態庫,編譯器查找動態連接庫時有隱含的命名規則,即在給出的名字前面加上lib,後面加上.a或.so來確定庫的名稱。
創建動態庫(.so)
生成動態庫
g++ -shared -fPIC test.cpp -o libtest.so
使用動態庫
cp libtest.so /usr/lib
g++ TestDynamicLibrary.cpp -L. -ltest -o test
./test
vs2013創建動態庫
(1)新建win32控制臺應用程序
(2)應用程序類型選擇靜態庫
(3) stdafx.h 頭文件寫函數聲明, stdafx.cpp寫函數定義
(4)右鍵項目,生成。在Debug目錄下生成靜態庫。
測試靜態庫:
(1)新建win32控制臺應用程序
(2)選擇空項目
(3)添加源文件,寫c++程序。
(4)將靜態庫文件夾下的stdafx.h和targetver.h文件和靜態庫lib文件三個都拷入到現在工程下的工程名目錄下
(5)
#include <iostream> #include "stdafx.h" //頭文件 #pragma comment (lib,"TestStaticLibrary")//添加靜態庫 using namespace std; int main() { cout << jiafa(1, 2) << endl; cout << jianfa(1, 2) << endl; return 0; }
vs2013動態庫
(1)新建win32控制臺應用程序
(2)應用程序類型選擇動態庫
(3) stdafx.h 頭文件寫函數聲明
extern __declspec(dllexport) int add(int a, int b);
stdafx.cpp寫函數定義
int add(int a, int b) { return a + b; }
(4)右鍵項目,生成。在Debug目錄下生成靜態庫。在debug目錄下,可以看見生成一個dll和lib
測試:
(1)新建win32控制臺應用程序
(2)選擇空項目
(3)添加源文件,寫c++程序。
(4)將靜態庫文件夾下的stdafx.h和targetver.h文件和靜態庫lib文件三個都拷入到現在工程下的工程名目錄下
(5)TestDLL.dll拷貝到debug文件夾下,和exe在同一目錄,不然運行時候找不到動態庫
#include <iostream> #include "stdafx.h" //頭文件 #pragma comment (lib,"TestDLL.lib")//添加靜態庫 using namespace std; int main() { cout << add(1, 2) << endl; return 0; }
linux+vs2013編譯靜態庫和動態庫