码迷,mamicode.com
首页 > 系统相关 > 详细

linux+vs2013编译静态库和动态库

时间:2017-11-09 00:49:33      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:pre   nbsp   extern   选择   class   拷贝   右键   找不到   inux   

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编译静态库和动态库

标签:pre   nbsp   extern   选择   class   拷贝   右键   找不到   inux   

原文地址:http://www.cnblogs.com/crazybird123/p/7807033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!