Linux下如何找到程序中是否有dlopen的库

Linux下如何找到程序中是否有dlopen的库,第1张

两个project:

dym -> dymframework

hello -> helloapp

helloapp动态链接dymframework

关于动态链接的xcode设置有以下几个变量:

@rpath

hello项目中,Run Path search paths的值,基本格式如下:

//:configuration = Debug

LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/Frameworks @executable_path/Frameworks

//:configuration = Release

LD_RUNPATH_SEARCH_PATHS = $(inherited) @loader_path/Frameworks @executable_path/Frameworks

@loader_path

根据apple doc的解析,是使用加载共享库的二进制文件所在的目录

比如, helloapp/hello会加载dymframework/dym,则@loader_path指向helloapp目录

@executable_path

Linux库有动态与静态两种,动态通常用so为后缀,静态用a为后缀。例如:libhelloso

libhelloa

为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:

libhelloso10,由于程序连接默认以so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。

ln

-s

libhelloso10

libhelloso1

ln

-s

libhelloso1

libhelloso

动态库和静态库的区别:

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

两种库的编译产生方法:

第一步要把源代码编绎成目标代码。以下面的代码helloc为例,生成hello库:

/

helloc

/

#include

void

sayhello()

{

printf("hello,world\n");

}

用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等

socket编程中需要用到的头文件

sys/typesh:数据类型定义

sys/socketh:提供socket函数及数据结构

netinet/inh:定义数据结构sockaddr_in

arpa/ineth:提供IP地址转换函数

netdbh:提供设置及获取域名的函数

sys/ioctlh:提供对I/O控制的函数

sys/pollh:提供socket等待测试机制的函数

其他在网络程序中常见的头文件

unistdh:提供通用的文件、目录、程序及进程 *** 作的函数

errnoh:提供错误号errno的定义,用于错误处理

fcntlh:提供对文件控制的函数

timeh:提供有关时间的函数

crypth:提供使用DES加密算法的加密函数

pwdh:提供对/etc/passwd文件访问的函数

shadowh:提供对/etc/shadow文件访问的函数

pthreadh:提供多线程 *** 作的函数

signalh:提供对信号 *** 作的函数

sys/waith、sys/ipch、sys/shmh:提供进程等待、进程间通讯(IPC)及共享内存的函数

以上就是关于Linux下如何找到程序中是否有dlopen的库全部的内容,包括:Linux下如何找到程序中是否有dlopen的库、linux C 如何修改静态库里面函数、开发C++网络程序一般用到哪些库,在linux下开发服务端的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10176544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存