两个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下开发服务端的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)