linux生成动态链接库返回字符串,Linux 下生成动态链接库并调用(.so)项目实例-Go语言中文社区...

Linux 下生成动态链接库并调用(.so)项目实例

[查看Windows下生成动态库调用详解]

基于OpenCV图像处理项目生成动态链接库并进行.so的调用,首先生成动态库是基于OpenCV开发环境进行,而调用部分通过服务器远程连接进行测试调用。

Linux下和Windows下生成动态库基本类似,手动创建目录用于存放所有的项目文件,并在本目录下进行所有的操作

hello.h文件

#ifndef _HELLO_H

#define _HELLO_H

extern "C"{

int opencv_main(char str[]);

}

#endif

这里头文件中也需要添加extern “C”,具体查看Windows下讲解

hello.cpp文件

#include "hello.h"

#include //加上函数实现需要的头文件

#include

#include

using namespace std;

using namespace cv;

extern "C"

int opencv_main(char str[])

{

cout << "str=" << str << endl;

Mat Image = imread(str);

imshow("Image", Image);

waitKey(0);

return 0;

}

到现在就可以编译生成.so文件了

g++ -shared -fPIC -o libhello.so hello.cpp

运行这行命令行生成libhello.so文件

注意,-shared参数和-fPIC参数非常重要:

-shared 告诉gcc要生成的是动态链接库;

-fPIC 告诉gcc生成的生成的代码是非位置依赖的,方面的用于动态链接。

最后进行测试

main.cpp

#include "hello.h"

#include

#include

int main()

{

char str[]="/opencv/nine.png";

opencv_main(str);

return 0;

}

这是在本地环境下(带有OpenCV运行环境),程序的图片路径需要自己进行设置

g++ -o main main.c -L. -lhello

运行可生成可执行文件main

-L.: 在当前路径下寻找.so文件

-lhello: 要链接这个libhello.so文件

如果出现如下问题

c43569b496e0977b5dabf373c28907ec.png

表示没有链接到本地OpenCV的环境,命令行后面加上下面命令

`pkg-config --cflags --libs opencv`

注:命令的引号不是普通的引号,是ESC下面的按键

最后文件夹下的文件如下所示

abddd79e8a3ad69b5ca183a6ee5153e4.png

运行main会弹出一张图片表示成功!!!

Gtk-WARNING **: cannot open display

如果运行不成功,报上面的错误表示你的系统没有安装图形显示界面

安装过程提供链接参考:图形界面的安装

本地环境测试OK!

可实际的项目生成的.so文件不可能在任何的服务器下安装本地需要的环境吧,所有调用.so文件也是处于一个无OpenCV环境的情况下进行调用。

从而在服务器上进行测试,具体步骤和上面雷同,这里就不在过多累述!

和上面不同的点本地环境是链接下载安装的环境,而服务器是不依赖与环境,但依赖各个OpenCV的.so库,所有需要将程序所需要的依赖库copy进服务器。

继而进行.so库的链接将so库加载进入共享文件中,设置方式进入/etc/ld.so.conf.d/目录下添加**.conf**文件,里面添加.so路径。

最后运行ldconfig

0be08423d30904bfc30f4554cc02a012.png

出现这种情况,表示系统链接不到这些库文件,但可以连接*.so.2.4.5文件,故把所有的*.so.2.4.5文件留下再试一次OK!

6feee800f85eba4e68eca376ddd26aa3.png

接着运行测试文件如下

083d12cec105d3c7619e62905511abc8.png

这里表示不能识别*.so文件需要进行软链接才能辨认识别出,进入.so存放的文件夹运行命令

**sudo ln -s .so.3 .so 产生软链接

最后运行结果基本没有什么多大问题了,可以任服务器调用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值