linux下创建和使用自己的动态链接库

linux下面的.so文件一般是指动态链接库文件,通过动态链接可以节省资源使得程序自身体积更小

如果多个程序使用到了相同的模块,可以更加充分的利用程序段,差别是动态库第一次加载的时候

程序肯恩会启动的慢点

下面介绍如何用G++生成和使用自己的动态链接库文件

实例:现在有文件replace.h 和replace.cpp通过G++将其编译成.so文件,然后在main.cpp文件中调用

replace.h文件中定义的函数

程序清单:

replace.h文件内容:

1 #include <stdio.h>
2 int length(const char* string);
3 char* replace(const char* string);

replace.cpp内容:

#include <stdio.h>
2 #include "replace.h"
3 int length(const char* string)
4 {
5 if (string == NULL) return 0;
6 int length = 0;
7 for (int i = 0; *(string + i) != ‘\0‘; ++i) {
8 if (*(string + i) == ‘ ‘) {
9 length += 3;
10 } else
11 ++length;
12 }
13 return length;
14 }
15
16 char* replace(const char* string)
17 {
18 int len = length(string);
19 if (len == 0) return NULL;
20 char* result = new char[len + 1];
21 int j = 0;
22 for (int i = 0; i < len; ++i, ++j) {
23 if (string[i] == ‘ ‘) {
24 result[j] = ‘%‘;
25 ++j;
26 result[j] = ‘2‘;

27 ++j;
28 result[j] = ‘0‘;
29 } else {
30 result[j] = string[i];
31 }
32 }
33 result[len] = ‘\0‘;
34 return result;
35 }
36

main.cpp内容:

1 #include <stdio.h>
2 #include "replace.h"
3 int main()
4 {
5 const char* p = "hjash sdfds fdsfds fds f dsf ds f s";
6 printf("%s\n", p);
7 printf("%s\n", replace(p));
8 return 0;
9 }
10

第一步:生成.so文件

g++ replace.cpp -fPIC -shared -o libreplace.so

这个时候ls查看当前目录可以发现已经多了一个 libreplace.so

第二步:编译连接动态库

g++ main.cpp -L -lreplace -o test

这个时候发现当前目录下面又多了一个test可执行文件

./test

结果:

./test: error while loading shared libraries: libreplace.so: cannot open shared object file: No such file or directory

原因是 libreplace.so文件并没有加入系统链接库路径

执行export LD_LIBRARY_PATH=当前路径

现在运行程序就可以得到正确的结果了

linux下创建和使用自己的动态链接库

时间: 2024-11-08 14:55:05

linux下创建和使用自己的动态链接库的相关文章

linux下Eclipse进行C编程时动态链接库的生成和使用

引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 一.创建动态链接库1.创建工程new->project->c++ project选择Shared Library->Empty Project.输入工程名a,点击finish,完成工程的创建. 2.编写代码在windows下封装动态链接库时对要封的函数要用__declspec(dllexport)来标明,在linux

两种在linux下创建应用程序快捷方式的方法

两种在linux下创建应用程序快捷方式的方法: A. 在桌面上创建快捷方式 B. 在应用程序菜单中添加快捷方式 在桌面上创建快捷方式 这是最简单的一种方法,在桌面上单击鼠标右键,会有一个“创建启动器”栏.这里我以为mplayer创建快捷方式为例说明: 名称-mplayer(或者你喜欢的任何名称,这个名称会出现在快捷图标的 下方) 命令-/usr/bin/gmplayer(这个是mplayer的gui应用程序的执行文件,跟 安装路径相关,可以通过which gmplayer找到) 图标-一般应用程

linux下的静态连接库和动态链接库

对linux的静态连接库和动态链接库分不清楚,在看了一篇博文后,现在想做个自己的总结,以加深印象: 1.库的基本概念: 库是可执行代码的二进制形式,其可以被调入操作系统调入内存进行执行. 在window和linux系统,都存在各自的库,但是两种系统的库并不能兼容,因为它们的编译器,连接器,汇编器都是不相同的. 在windows下,静态连接库的后缀是.lib;动态链接库的后缀是.dll 在linux系统下,静态链接库的后缀是.a;动态链接库的后缀是.so 2.静态连接库和动态链接库的命名: 静态连

4.windows和Linux下创建oracleusername表空间,表,插入数据,用户管理表等操作

进入超级管理员,运行下面命令 Window下创建数据库.表空间,用户,插入数据等操作 -- 01 创建表空间 -- 注意表空间的路径 依据实际安装环境进行调整 CREATE TABLESPACE ts_myscott LOGGING DATAFILE 'F:/app/to-to/oradata/orcl/ts_myscott.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL; CREATE TABLESPACE ts_myscott2 LOGGING DATAFILE

4.windows和Linux下创建oracle用户名表空间,表,插入数据,用户管理表等操作

进入超级管理员,执行以下命令 Window下创建数据库,表空间,用户,插入数据等操作 -- 01 创建表空间 -- 注意表空间的路径 根据实际安装环境进行调整 CREATE TABLESPACE ts_myscott LOGGING DATAFILE 'F:/app/to-to/oradata/orcl/ts_myscott.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL; CREATE TABLESPACE ts_myscott2 LOGGING DATAFILE

linux下创建用户

linux下创建用户(一) Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也可以帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和各自的口令.用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录. 实现用户账号的管理,要完成的工作主要有如下几个方面: · 用户账

linux下创建svn仓库及用户

1 Linux下创建svn仓库 1.1 启动SVN服务 svnserve -d -r  /SVNRootDirectry 其中SVNRootDirectry是你的SVN 根目录,例如192.85.1.2上的是:/SVN.-d 表示以后太服务方式执行,-r就表示root 1.2 创建仓储 1.2.1 在SVN根目录下建立版本仓库 svnadmin create study 命令 :svnadmin create  msm 其中msm是版本仓库的名字,仓库建立好了以后会有出现一个仓库名字的文件夹,文

Linux下创建和删除用户

在Linux下创建用户和删除用户,必须在root用户下,如果你当前不是用根用户登录,你可以打开终端,输入"su root"命令,再输入根口令,就可以进入root用户模式下,如下所示: 创建用户(useradd): (1)用useradd命令创建用户创建用户: 语法: useradd [所要创建的用户名] ,回车 (2)用passwd命令为该用户创建密码: 语法: passwd [用户名]  ,回车 (3)输入密码:一般密码至少要有六个字符,这里输入的密码是看不见的,所以看到屏幕没显示,

LINUX下创建RAID1

实验 添加两块30G硬盘 在不重新启动的情况下,让Linux系统识别到新添加的磁盘 使用putty连接linux操作服务器 [[email protected] ~]# fdisk –l 没有识别到新添加的两块磁盘 [[email protected] ~]# echo "- - -" >/sys/class/scsi_host/host0/scan [[email protected] ~]# echo "-- -" > /sys/class/scsi