文档章节

Linux和Windows平台 动态库.so和.dll文件的生成

o
 osc_a22drz29
发布于 2019/03/28 11:34
字数 736
阅读 33
收藏 0
c++

精选30+云产品,助力企业轻松上云!>>>

Linux动态库的生成

1、 纯cpp文件打包动态库

将所有cpp文件和所需要的头文件放在同一文件夹,然后执行下面命令

gcc -shared - fpic *.c -o xxx.so;

g++ -std=c++17 - fpic *.cpp -o xxx.so;

[C++17标准,需要高版本gcc,本人采用gcc 8.2.0]

其中*.c代表所有的c文件,xxx.so中的xxx代表so动态库的名字, -std=c++17代表采用C++17标准编译。

2、 多个cpp文件和so库一起打包成一个so

g++ -std=c++17 -fpic AFClassifier.cpp -shared -L. -lRandom -o test.so

3、 多个so打包为一个so

如果有两个so,分别为 libRandom.so和libAF.so,并且在当前目录下面,则执行下面命令:

g++ -std=c++17 -fpic -shared -L. -lAF -lRandom -o test.so

如果libRandom.so和libAF.so不在当前目录,-L 后面要加上目录,比如在当前目录的下一层目录,则:

g++ -std=c++17 -fpic -shared -L ./ -lAF -lRandom -o test.so

 

===========================================================

Windows动态库的打包(dll)

1、 打开工程,在解决方案中打开属性—》配置属性:做以下修改:

“目标文件扩展名”:由默认的exe修改为dll

“配置类型”:选择 动态库dll

同时注意 配置 和 平台 的版本。最好把release和debug下面的配置属性都做上面的修改。

2、 在接口文件(也就是最重要的头文件)添加两处代码:

1)

#ifdef LIBRARY_EXPORTS

#    define LIBRARY_API __declspec(dllexport)

#else

#    define LIBRARY_API __declspec(dllimport)

#endif

2)在调用函数前面加上“LIBRARY_AP”

当然 如果在接口函数前面直接写上__declspec(dllimport)有时也可以,但是当遇到静态变量或者静态函数时,就不行了,我自己没有真实测试过,看的博文这样介绍的,博文连接如下:

【参考:https://blog.csdn.net/clever101/article/details/5421782】

3、 点击生成解决方案,即可生成.dll文件。版本号要对应上前面的配置和平台。输出平台显示生成成功,即可查看生成的dll文件。

如果是X86平台,则对应就是release和debug文件夹下面的dll文件

如果是X64平台,则对应X64文件夹里面的release和debug文件中的dll文件。

===========================================================================

Windows动态库dll文件的使用

1、 从别人那里获取的动态库最好要求x86,x64两个release版本。方便不同版本的调试,虽然现在基本上用的都是X64。

2、 将动态库dll和静态库lib,以及接口文件一起copy到工程里面,在调试的主函数中加入下面这行代码:#pragma comment(lib,"XXX.lib"),然后将接口文件import进来。Dll文件只需要放在工程中即可,代码中不需要管dll文件,因为lib文件已经告诉你的工程该怎么调用dll。

3、 运行,即可成功。如果不成功,查看平台和配置是否在对着。

 

上一篇: Vue(day5)
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
windows平台开发,在eclipse中使用java如何调用.so文件,试了半天还是不行:

windows平台开发,在eclipse中使用java如何调用.so文件,试了半天还是不行: 1、java工程项目不是安卓项目,是web项目, 2、.so是linux下生成的动态库,.dll是windows下生成的动态库,网上几...

hhl3136
2017/11/21
4.1K
7
JNI编程实现(Windows)

上一篇介绍了平台的编程方法,平台的本地调用基本类似,区别就是制作的动态库不同,平台是,平台是。其中,平台的函数库也分为静态库和动态库,下面介绍一下相关概念: 静态库在链接步骤中,...

飞鱼湾
2018/11/28
31
0
Windows下Cmake生成动态库install命令失败、导入库概念

Windows下Cmake生成动态库install失败、导入库概念 摘要: Windows下cmake install命令安装动态库文件失败 .dll.a和.dll文件的区别 动态库、静态库和导入库 1、Windows下cmake install命令安装...

osc_ckub9v3l
2019/11/15
5
0
安全数据传输平台项目——总结2.0 --- vs2013 linux 动态库。

1.动态库的创建   在Linux平台下利用gcc命令: gcc -fPIC -shared -o lib<动态库名>.so <相关.c 和 .o文件>   在Windows下使用VS:(我用的是2013)      选择Visual C++下的Win32控制台...

osc_9dvtgsvd
2018/07/19
1
0
Go实现的库的跨平台编译调用

通过cgo可以将go的程序编译成库,在其他程序,如C程序中调用。cgo本身就提供了多平台的支持。不过对于每个平台还需要有相应的C编译工具链的支持,对不同平台的支持程度也不一致,需要针对每个...

qlee
01/12
62
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 那么长的绳子,你这是放风筝呢

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @ 巴拉迪维:黑豹乐队的单曲《无地自容》 耳畔突然响起旋律,是那首老歌。中国摇滚有了《一无所有》不再一无所有;中国摇滚有了《无地自容》不...

小小编辑
50分钟前
55
1
《吐血整理》-顶级程序员书单集

你知道的越多,你不知道的越多 给岁月以文明,而不是给文明以岁月 前言 王潇:格局决定了一个人的梦想,梦想反过来决定行为。 那格局是什么呢? 格局是你能够看见的深度、广度和密度。 王潇认...

敖丙
2019/12/11
8
0
我可以在Android版式中加下划线吗? - Can I underline text in an Android layout?

问题: 如何在Android布局xml文件中定义带下划线的文本? 解决方案: 参考一: https://stackoom.com/question/A31z/我可以在Android版式中加下划线吗 参考二: https://oldbug.net/q/A31z/...

法国红酒甜
53分钟前
26
0
干掉ELK | 使用Prometheus+Grafana搭建监控平台

什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 Prometheus的特点 · 多维度...

木九天
今天
34
0
拉勾网拉你上勾

预览 需求简介 拉勾网是一个互联网行业的一个招聘网站,上面有许多职位,于是乎,小编想提取指定职位的基本信息(职位名,薪水,工作经验,工作地点,教育背景),然后插入 MongoDB 数据库,...

木下瞳
2019/04/17
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部