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

Posted crazybird123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux+vs2013编译静态库和动态库相关的知识,希望对你有一定的参考价值。

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编译静态库和动态库的主要内容,如果未能解决你的问题,请参考以下文章

linux 静态库和动态库编译的区别

linux中静态库和动态库

Linux下RabbitMQ的编译,生成动态库和静态库

Linux上静态库和动态库的编译和使用

g++编译使用生成静态库和动态库(Linux)

linux上静态库和动态库的编译和使用(附外部符号错误浅谈)