Windows和Linux上生成动态库(dll,.so)

时间:2024-05-23 08:53:16

最近在负责一个模块功能的开发,然后需要封装出接口,以前没搞过,在网上搜寻了很多答案,终于搞好了。

一、首先在Windows上进行封装:

IDE是vs2017:

Windows和Linux上生成动态库(dll,.so)

1、首先写好所需的头文件和源文件。接口定义在头文件中,对应的一个源文件是接口的实现。然后移除掉main.cpp.

Windows和Linux上生成动态库(dll,.so)

2、然后添加def文件,是用来到处接口函数的。

Windows和Linux上生成动态库(dll,.so)

3、接着编写这个def文件

Windows和Linux上生成动态库(dll,.so)

格式:LIBRARY

             EXPORTS

             这里写接口函数名(不用写函数的返回类型和参数)

这样def文件就写好了,接下来就可以生成动态库了。

4、打开项目属性设置页面:

Windows和Linux上生成动态库(dll,.so)

配置类型选择dll类型。通常 我们所用的生成exe类型。

5、接着生成解决方案:

Windows和Linux上生成动态库(dll,.so)

6、现在在项目文件下debug文件夹就可以看到所需的dll和lib了:

Windows和Linux上生成动态库(dll,.so)

接下来可以测试所生成的dll和lib是否可以使用。

7、新建一个项目,然后编写main.cpp:

Windows和Linux上生成动态库(dll,.so)

8、然后把接口所在的头文件和生成的dll,lib添加进来:

Windows和Linux上生成动态库(dll,.so)

Windows和Linux上生成动态库(dll,.so)

9、关于dll,可以直接放进文件中就行,

Windows和Linux上生成动态库(dll,.so)

10、大功告成

Windows和Linux上生成动态库(dll,.so)

成功运行。

二、Linux相对简单一点

1、同样是先编写头文件以及对应的源文件。

Windows和Linux上生成动态库(dll,.so)

2、g++ -fPIC -shared -o libOnvifSnapShot.so(动态库名字) OnvifSnapShot.cpp(生成动态库所需要的源文件)

Windows和Linux上生成动态库(dll,.so)

Windows和Linux上生成动态库(dll,.so)

已生成。

3、编写main函数并调用动态库,g++ main.cpp -L. -lOnvifSnapShot ,生成a.out

Windows和Linux上生成动态库(dll,.so)

Windows和Linux上生成动态库(dll,.so)

已经生成a.out可执行文件。

4、直接运行./a.out,会出错:./a.out: error while loading shared libraries: libmax.so: cannot open shared object file: No such file or directory,找不到这个库。

Windows和Linux上生成动态库(dll,.so)

5、把 libOnvifSnapShot.so 所在的路径添加到 /etc/ld.so.conf 中,再以root权限运行ldconfig程序,更新 /etc/ld.so.cache ,a.out运行时,就可以找到 libOnvifSnapShot.so。

先pwd查看当前.so的路径

Windows和Linux上生成动态库(dll,.so)

6、然后添加到/etc/ld.so.conf中:

Windows和Linux上生成动态库(dll,.so)

OK,设置完成,再次运行a.out

Windows和Linux上生成动态库(dll,.so)

成功运行。

还有另一种简单的方法,就是为a.out指定 LD_LIBRARY_PATH:输入LD_LIBRARY_PATH=. ./a.out也可以成功运行。LD_LIBRARY_PATH=. 是告诉 a.out,先在当前路径寻找链接的动态库。

Windows和Linux上生成动态库(dll,.so)

这些都是简单生成动态库过程,自己也在慢慢摸索中,共勉!