导航:首页 > 操作系统 > linux动态库

linux动态库

发布时间:2022-01-17 14:14:09

1. linux 把动态库(libxxx.so)进行静态链接

不行的。要静态链接就要使用静态库(libxxx.a).

2. linux为什么一个动态库链接另一个动态库不行

没看明白问题
如果是被调程序加载动态库,那是自动的,由主调进程环境变量决定。
如果是主调程序加载动态库,则需dlopen打开文件,dlsym按符号获取映射地址,也就是函数或全局数据地址。

3. linux动态库可以不以lib开头吗

可以,lib 开头只是为了方便。例如 gcc 想要调用 libfoobar.so 的函数只要加 -lfoobar 就行了,如果不是lib开头的需要完整写出 libfoobar.so,不能用 -l参数。

4. 什么是linux中的SO动态库

so动态链接库是对它有依赖关系的程序运行时需要调用的,可以通过命令
ldd “程序名字”来查看程序调用了哪些动态链接库,系统默认会自动加载/usr/lib/ 等目录下的动态链接库,如果是源码安装的库,它的动态链接库文件会存在你自定义安装的目录的lib下,这时你需要修改/etc/ld.so.conf文件来指定动态链接库的加载路径,然后运行ldconfig命令来加载动态链接库,ldconfig -v是查看那些动态链接库已经被加载了

5. 如何在linux实现动态的更新一个动态库

1。可行
2。采用版本标记加软联接的办法.如下:
0)将B.so改名为B.so.1,然后命令行执行ln -s B.so B.so.1
1)用B.so下载新的so,起名为B.so.2
2)生成一个脚本,内有: ln -s B.so B.so.2
3)执行此脚本,可以放到rc.local中,下次开机自动执行.

6. linux下,有几个.so。如何将这几个动态库编译成一个动态库

g++ -l*** -l*** -L 库目录. 一次g++ 是可以同时连接多个动态库的.不用把多个动态库编成一个.

7. linux动态库和静态库的区别

静态库:这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

动态库:这类库的名字一般是libxxx.M.N.so,同样的xxx为库的名字,M是库的主版本号,N是库的副版本号。当然也可以不要版本号,但名字必须有。相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。linux系统有几个重要的目录存放相应的函数库,如/lib /usr/lib。

当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

8. linux中如何将动态链接库嵌入到可执行程序

动态库是运行时加载,动态库有自己的加载路径;运行时会从固定路径加载;
即需要把动态库放到固定路径下;
比如linux的/lib/目录下

9. linux下的动态库是如何在程序运行时加载

直接上代码,祈祷排版不要乱掉,一下源码来自http://lameck.blog.163.com/blog/static/388113742011111591750149/

//test.h
#ifndef_TEST_H_
#define_TEST_H_
typedefint(*TEST_FUN)(void);
#endif
//test.cgcc-ctest.c-otest.o
//gcc-sharedtest.o-olibtest.so
#include<stdio.h>
#include"test.h"
inttest_fun(void)
{
printf("thisisatest! ");
return0;
}
//main.cgccmain.c-omain-ldl
#include<stdio.h>
#include<stdlib.h>
#include<dlfcn.h>
#include"test.h"

intmain()
{
void*handle=NULL;
TEST_FUNp=NULL;
char*error=NULL;

handle=dlopen("./libtest.so",RTLD_LAZY);
if((error=dlerror())!=NULL)
{
printf("%s ",error);
exit(1);
}
p=(TEST_FUN)dlsym(handle,"test_fun");
if((error=dlerror())!=NULL)
{
printf("%s ",error);
dlclose(handle);
exit(1);
}
p();
dlclose(handle);
return0;
}

主要函数

void * dlopen( const char *pathname, intmode);

void* dlsym(void* handle,const char* symbol);

const char *dlerror(void);

int dlclose (void *handle);

这些基本上可以从函数签名中得到实际功能和使用方法..

除了mode参数,其他的想必能够通过阅读源代码来学习吧

关于dlopen的mode参数有如下几个常量:

1、解析方式

2、作用范围

3、作用方式

阅读全文

与linux动态库相关的资料

热点内容
求知课堂python2020 浏览:260
kafka删除topic命令 浏览:757
phpsql单引号 浏览:84
英雄联盟压缩壁纸 浏览:450
办公app需要什么服务器 浏览:626
安卓服务器怎么获得 浏览:806
空调压缩机冷媒的作用 浏览:779
淘宝app是以什么为利的 浏览:655
java提取图片文字 浏览:922
我的世界手机版指令复制命令 浏览:33
java判断字符串为数字 浏览:924
androidrpc框架 浏览:488
云服务器essd和ssd 浏览:522
家用网关的加密方式 浏览:1
怎么从ppt导出pdf文件 浏览:971
换汽车空调压缩机轴承 浏览:845
平板怎么登录安卓端 浏览:195
图像拼接计算法 浏览:255
怎么打开饥荒服务器的本地文件夹 浏览:291
usb扫描枪编程 浏览:673