Linux下生成动态库函数及调用简述

生成一般的动态库函数

一般的库函数指的是只是单纯的编译的代码,比如自己利用标准头文件编写的c|cpp程序,for example:加减乘除函数

具体如下,以求和为例,找到一个目录开始操作,首先新建文件

touch sum.cpp //保存生成库的源码
touch sum.h  //保存生成库的头文件,头文件内容如下
    #ifndef __SUM_H__
    #define __SUM_H__
    int sum(int x,int y);
    #endif
将sum.cpp和sum.h编译成动态库文件,后缀为.so
法1.gcc -fPIC -shared -o libsum.so sum.cpp
法2.gcc -c -fPIC sum.cpp
    gcc -shared -o libsum.so sum.o
touch test.cpp //保存调用sum库的主程序,内容如下
    include<iostream>
    include"sum.h"
    int main()
    {
        int x=1;
        int y=2;
        sum(x,y);//sum函数具体在sum.cpp中体现,可自由编写
    }
生成可执行文件.out,默认为a.out,文件名可自由修改,下面用test.out为例
gcc test.cpp -o test.out -L. -lsum   //生成test.out,其中-lxxx表示要链接libxxx.so,xxx表示库的源码文件名
LD_LIBRARY_PATH=. ./test.out   //执行即可,LD_LIBRARY_PATH为可执行文件指明库路径

生成包含库的动态库函数

这里使用opencv为例,如果使用opencv的库编写一个程序,正好这个程序又要生成动态库,那么除了要找到新生成的动态库路径还要考虑到opencv的库路径,这就和上面的情况有所不同了。

opencv安装好之后,一般是编译在/usr/local/include下,假设opencv编译完成,那么和上面一样找到一个路径进行操作。

touch opencvtest.cpp  //生成库的源码
touch opencvtest.h   //生成库的头文件
touch opencv_test.cpp//主程序
g++ -shared -fpic -o libopencvtest.so opencvtest.cpp `pkg-config --libs --cflags opencv`//生成.so动态库
g++ -o opencv_test.out opencv_test.cpp ./libopencvtest.so `pkg-config --libs --cflags opencv`//生成opencv_test.out文件
./opencv_test.out//执行

与上述不同的是在g++最后加上了一个`pkg-config --libs --cflags opencv`就是这个生成动态库要连接上opencv的库,否则生成.so时会报出找不到关于opencv的头文件,既然是关于opencv的,那么一定会涉及到读取图像路径,Linux与Windows的路径格式还是有区别的,如果设置的都没问题,程序还是不行,比如执行.out文件时会报出如下错误,那就是路径问题了。这个错误很容易出现在Windows下的程序移植到Linux下,因此,务必小心。

OpenCV Error: Bad argument (unrecognized or unsupported array type) in cvPtr2D, file /home/pi/opencv-2.4.9/modules/core/src/array.cpp, line 1830
terminate called after throwing an instance of 'cv::Exception'
what():  /home/pi/opencv-2.4.9/modules/core/src/array.cpp:1830: error: (-5) unrecognized or unsupported array type in function cvPtr2D

下面简单列出两种不同系统下的路径格式,以绝对路径为例

Windows:C:\\****\\*****\\****,上下级文件夹用\\隔开

Linux:/usr/****/****/***,上下级文件夹用/隔开

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值