Linux是一种自由和开放源代码的操作系统,其内核是由极富远见的Linux之父Linus Torvalds开发的。Linux的普及使得它成为了服务器和嵌入式设备的首选系统。而Linux系统强大的可扩展性也为开发者提供了很多方便之处。其中,使用动态连接库和共享变量是Linux开发中重要的部分。
成都创新互联公司是一家专注于成都网站建设、做网站与策划设计,临桂网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:临桂等地区。临桂做网站价格咨询:18982081108
一、动态连接库
动态连接库也叫共享库,它是一种在程序运行时被加载和链接的库,它可以和多个程序共享,有助于减小程序体积和重复代码。Linux下的动态连接库有两种后缀名:*.so和*.dynlib,其中*.so是Linux下最为常见的库类型。
Linux系统下的动态连接库使用与静态连接库相似。动态连接库包含在一个为库文件创建的目录下,可以使用“ldd”命令来链接到一个应用程序,在链接时指定库路径或设置环境变量“LD_LIBRARY_PATH”即可。具体的可以参考以下三个步骤:
1.编译时加-l参数指定库
$ gcc -o app app.c -l library
2.设置库路径
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib
3.使用ldd检查库的链接状态
$ ldd app
二、共享变量
共享变量也叫共享内存,是许多进程可以访问和编辑的一块内存区域。共享内存区域存在于特定的内存地址空间中,每个进程都可以通过使用mmap()系统调用映射共享内存,以此来访问共享内存中的数据。当一个进程对内存进行了修改,所有其他访问同一共享内存的进程将会看到这些修改。这项技术常常用于进程间通信、数据共享以及提高程序的性能。
使用共享变量时,可以在一个进程创建共享内存,然后将该内存区域映射至另一进程的地址空间中,并让这两个进程共享该内存区域。在Linux系统下,使用共享变量可分为如下三个步骤:
1.按照POSIX标准的shm_open()函数创建共享内存区域
int fd = shm_open(“shm_name”, O_CREAT | O_RDWR, 0666);
if(fd == -1){
perror(“shm_open”);
return -1;
}
2.使用mmap()函数将内存映射到进程地址空间
char* addr = (char*)mmap(NULL, region_size, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
if (addr == MAP_FLED){
perror(“mmap”);
return -1;
}
3.对共享内存变量进行操作
char* buffer;
memcpy(buffer, addr, strlen(addr));
本文对进行了简单介绍,可以在某些特殊的场合下为Linux开发者提供方便。开发人员可以利用这些技术来减小程序体积,优化系统性能,实现多进程之间的数据共享。希望本文能对大家有所帮助。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220动态库的生成
1>首先生成目标文件,但是此时要加编译器选项-fpic和链接器闹嫌扮选项-shared,
gcc -fpic -c add.c
gcc -fpic -c sub.c
生成中间文件add.o和sub.o
2>其次生成动态库
gcc -shared –o libtiger.so add.o sub.o
生成动态库libtiger.so,libtiger.so就是我者梁们生成的目标动态库。我们以后使用动态库和main.c程序生成可执行程序
说明:
以上两部也可以合成一步搞定:
gcc -fpic -shared add.c sub.c -o libtiger.so
2.使用动态链接库
在编译程序时,使用动态链接库和静态库是一致的,使用”-l库名”的方式,在生成可执行文件的时候会链接库文件。
1>使用命令:
gcc -o main main.c -L ./ -ltiger
2>-L指定动态链接库的路劲,-ldtiger链接库函数tiger。-ltiger是动态库的调用规则。Linux系统下的动态库命名方式是lib*.so,而在链接时表示位-l*,*是自己命名的库名。
3>但是程序会提示如下错误
error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct
这是因为程序运行时没有找到动态链接库造成的。程序编译时链接动态库和运行时使用动态链接库的概念是不同的,在运行时,程序链接的动态链接库需要在系统目录下才行。
4>使用以下方法可以解决此问题
a. 在linux下最方便的解决方案是拷贝libtiger.so到绝对目录 /lib 下液灶(但是,要是超级用户才可以,因此要使用sudo哦,亲)。就可以生成可执行程序了
b.第二种方法是:将动态链接库的目录放到程序搜索路径中,可以将库的路径加到环境变量LD_LIBRARY_PATH中实现:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
/etc/ld.so.conf文件里增加动态库所在的路径
或者/etc/ld.so.conf.d下新建.conf文件,内容为加动态库所在的路径
动态连接库 linux 共享变量的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于动态连接库 linux 共享变量,Linux下动态连接库与共享变量的使用,matlab在linux下生成的动态链接库怎么用,linux怎样添加永久动态库环境变量的信息别忘了在本站进行查找喔。
成都创新互联科技公司主营:网站设计、网站建设、小程序制作、成都软件开发、网页设计、微信开发、成都小程序开发、网站制作、网站开发等业务,是专业的成都做小程序公司、成都网站建设公司、成都做网站的公司。创新互联公司集小程序制作创意,网站制作策划,画册、网页、VI设计,网站、软件、微信、小程序开发于一体。
网页标题:Linux下动态连接库与共享变量的使用(动态连接库linux共享变量)
URL网址:http://www.shufengxianlan.com/qtweb/news8/91008.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联