ubuntu下动态链接库的编译和使用实例

以下实例的环境是amd64 + ubuntu10.10 +g++ 4.4.5测试成功,在其他配置的机器上可能有一点区别。
 动态库的使用方式中有两种,第一种是类似于静态库的使用,另一种我称之为真正的动态加载动态库,主要是因为这种方式在程序运行的过程中加载链接库,使用之后在卸载链接库。
  先介绍第一种。
 在目录/home/owner/test/下创建我们的实验程序:
     //dll_fun.c
     #include<stdio.h>
     void dll_function(const char*szString)
     {
           printf("%s\n", szString);
     }
  编译生成动态链接库
     gcc -c-fPIC dll_fun.c //这里一定要加上-fPIC选项,不然下一步编译失败
       gcc -shared -fPIC -olibdllfun.so dll_fun.o //生成动态链接库libdllfun.so
  创建调用动态库方法:
     //main.c
     void dll_function(const char*szString);
     int main()
     {
          dll_function("This is the words of the dllfunction!!!!!!");
           return0; 
     }
  编译main.c生成可执行文件
     gcc -o main main.c -L. -ldllfun//这里提供了刚才生成的dllfun库
 如果此时执行./main的话,会出现如下错误:
     cannot open shared object file:No such file or directory
  这是因为系统未找到动态库libdllfun.so。
 
  Linux动态链接库的默认搜索路径是/lib和/usr/lib,因此动态库被创建后,一般都复制到这两个目录下面,当程序执行时需要某动态库,并且改动态库还没有加载到内存中,则系统会自动到这两个默认的搜索路径中去查找相应的动态库文件,然后加载改文件到内存中,这样程序就可以使用该动态库中的函数以及该动态库中的其他资源了。在linux中,动态库的搜索路径除了默认的搜索路径外,还可以通过其他三种方法来指定,这里只介绍其中的一种:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
  当通过该环境变量指定多个动态链接库搜索路径时,路径之间用冒号":"分隔。    
  使用下面命令来配置环境
    mkdir /home/owner/test/lib//将这个目录设置为动态库的存放目录
    mkdir/home/owner/test/libdllfun.so /home/owner/test/lib/libdllfun.so
    export LD_LIBRARY_PATH=/home/owner/test/lib
  此时设置这个环境变量之后的所有命令命令中,该环境变量都有效。
  把.so(动态链接库)直接放在根目录下的lib文件下(!!!一面总是加载不到路径)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sdut 数据结构实验之栈四:括号匹配

数据结构实验之栈四&#xff1a;括号匹配 Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description 给你一串字符&#xff0c;不超过50个字符&#xff0c;可能包括括号、数字、字母、标点符号、空格&#xff0c;你的任务是检查这一串字符中的( )…

解读Batch Normalization

【活动】Python创意编程活动开始啦&#xff01;&#xff01;&#xff01; CSDN日报20170424 ——《技术方向的选择》 程序员4月书讯&#xff1a;Angular来了&#xff01;解读Batch Normalization 2016-02-23 16:03 5262人阅读 评论(1) 收藏 举报 本文章已收录于&#xf…

Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn

Caffe学习系列(1)&#xff1a;安装配置ubuntu14.04cuda7.5caffecudnn 一、版本 linux系统&#xff1a;Ubuntu 14.04 &#xff08;64位&#xff09; 显卡&#xff1a;Nvidia K20c cuda: cuda_7.5.18_linux.run cudnn: cudnn-7.0-linux-x64-v4.0-rc 二、下载 Ubuntu 14.04下载地址…

将数据集做成VOC2007格式用于Faster-RCNN训练

[置顶] 将数据集做成VOC2007格式用于Faster-RCNN训练 2016-02-23 15:35 29068人阅读 评论(336) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; Deep Learning&#xff08;7&#xff09; 作者同类文章X版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主…

快速排序的实现--代码

#include<stdio.h>int a[10000]; void QickSort(int a[],int l,int r) {int temp;int il,jr;if(l<r){tempa[l];//存val的值while(i!j){while(j>i&&a[j]>temp) --j;// 从右往左找出该数比val值小的数if(i<j){a[i]a[j];//放在val的左 边i;//i右移动}wh…

SSD框架训练自己的数据集

SSD框架训练自己的数据集 SSD demo中详细介绍了如何在VOC数据集上使用SSD进行物体检测的训练和验证。本文介绍如何使用SSD实现对自己数据集的训练和验证过程&#xff0c;内容包括&#xff1a; 1 数据集的标注2 数据集的转换3 使用SSD如何训练4 使用SSD如何测试1 数据集的标注 …

归并排序的实现-代码

#include<stdio.h> void merge_sort(int *a,int *b,int x,int y) { if(y-x>1) { int mx(y-x)/2;//中间点的坐标 int px,qm,ix; merge_sort(a,b,x,m); merge_sort(a,b,m,y); while(p<m||q<y) { if(q>y||(p<m&&a[p]<a[q])) b[i]…

SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)

承接上一篇SSD介绍&#xff1a;SSDcaffe︱Single Shot MultiBox Detector 目标检测&#xff08;一&#xff09; 如果自己要训练SSD模型呢&#xff0c;关键的就是LMDB格式生成&#xff0c;从官方教程weiliu89/caffe来看&#xff0c;寥寥几行code&#xff0c;但是前面的数据整理…

把图片存成视频 python

tips: 1.保存的图片大小一定要一样 2.图像做好是标准的视频格式大小 3.图片要和视频size一样大小 代码如下 # -*- coding:utf8 -*- import os import cv2 import numpy as np import cv2.cv as cv path /home/m/mycode/cv filelist os.listdir(path) total_num len(f…

sdut 双向队列(STL)

deque<ll>q;//定义一个双向队列q&#xff0c;类型为long long q.push_front(a);//将a从队首插入队列 q.push_back(a);//将a从队尾插入队列 q.pop_front();//队首弹掉一个元素 q.pop_back();//队尾弹出一个元素 aq.front();//返回队首元素 aq.back();//返回队尾元素 aq.si…

给文件重命名

# -*- coding:utf8 -*-import osclass BatchRename():批量重命名文件夹中的图片文件def __init__(self):self.path home/l/imagedef rename(self):filelist os.listdir(self.path)total_num len(filelist)i 0for item in filelist:if item.endswith(.jpg):src os.path.joi…

pip install scikit-image on windows 失败 解决方案

到官网下载包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-image 我们下载 scikit_image‑0.13.0‑cp35‑cp35m‑win_amd64.whl 也可到我的CNDS下载 安装时会出现一下错误 scikit_image-0.13.0-cp34-none-win_amd64.whl is not a supported wheel on this platform…

sdut 数据结构实验之排序三:bucket sort

一开始这种做法超时&#xff1a; #include<stdio.h>int b[5000000],a[5000000],n,ans; void merge_sort(int *a,int *b,int x,int y) {if(y-x>1){int mx(y-x)/2;//中间点的坐标int px,qm,ix;merge_sort(a,b,x,m);merge_sort(a,b,m,y);while(p<m||q<y){if(q>…

Caffe训练源码基本流程

苏的专栏 致力于学习计算机视觉、模式识别、机器学习、深度学习相关技术&#xff1a;&#xff1a;&#xff1a;&#xff1a;希望结识更多同道中人。 QQ&#xff1a;2816568984 微信&#xff1a;Suc1011 目录视图 摘要视图 订阅 【活动】2017 CSDN博客专栏评选 【评论送书】…

fatal error: GL/glew.h: 没有那个文件或目录

搜索libglew的版本 #apt-cache search glew libglew-dbg - OpenGL Extension Wrangler (debugging symbols) libglew-dev - OpenGL Extension Wrangler - development environment libglew1.13 - OpenGL Extension Wrangler - runtime environment libglewmx-dbg - OpenGL E…

运行cudasift

文件中有cmakelist.txt 运行命令 cmake . 就会生成makefile type: make 出现错误&#xff1a; /usr/bin/ld: 找不到 -lopencv_dep_cudart 在cmake 时候用一下指令&#xff1a; cmake -D CUDA_USE_STATIC_CUDA_RUNTIMEOFF . make的时候可能会出现以下错误 make[2]: …

电脑DNS修复

首先在dos窗口下输入以下命令&#xff1a; ipconfig/displaydns 可以看到当前的缓存的所有DNS记录&#xff1a; 然后&#xff1a; ipconfig/flushdns 刷新当前的DNS

数据结构实验之排序七:选课名单(卡内存的一道题。。坑)

RE。。。 带更正 #include<iostream> #include<algorithm> using namespace std; #include<cstdio> #include<cstring> struct people {char name[100];int sum_class;int cl[2005]; }a[40000],b[40000]; int cmp(people a,people b) {char t[100],l[…

/usr/bin/ld: 找不到 -lopencv_dep_cudart

make出现/usr/bin/ld: 找不到 -lopencv_dep_cudart错误时候 我们在cmake时候加上参数 cmake -D CUDA_USE_STATIC_CUDA_RUNTIMEOFF .

ubuntu16.04下安装opencv3.2版本

1、下载OpenCV的源码 OpenCV官网上有linux版本的源码包可以下载&#xff0c;不过最好是从git上下载&#xff0c;这样可以保证下载得到的是最新的代码&#xff1a;1 wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip 2 unzip opencv.zip 2、编译安装…