1. 程式人生 > >linux+vs2013編譯靜態庫和動態庫

linux+vs2013編譯靜態庫和動態庫

cal 控制 文件 urn 運行時 names c++ spec using

Linux下創建與使用靜態庫

Linux靜態庫命名規則

Linux靜態庫命名規範,必須是"lib[your_library_name].a"lib為前綴,中間是靜態庫名,擴展名為.a

創建靜態庫(.a

(1) 將代碼文件編譯成目標文件.otest.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.htargetver.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編譯靜態庫和動態庫