Mac OS X下的动态链接库

简介:
动态链接库已成为现代操作系统的基本组成部分,比如Windows下数不清的.DLL文件和
臭名昭著的DLL地狱,Linux下成千上万的.so文件。Mac OS X下也有许多动态链接库,
他们的扩展名是.dylib。


.dylib是Mach-O格式,也就是Mac OS X下的二进制文件格式。Mac OS X提供了一系列
工具,用于创建和访问动态链接库。


编译器/usr/bin/cc,也就是gcc了,Apple改过的。这个主要还是一个壳,去调用其他
的一些部件。当然同时还有/usr/bin/c++,等等。


汇编器/usr/bin/as


链接器/usr/bin/ld


Mac OS X有个自己的工具,/usr/bin/libtool,来创建动态链接库。这个libtool不是
GNU的那个同名的libtool。我记得GNU libtool可以从Fink(http://fink.sf.net)下
载,编译后得到glibtool。


下面来看看如何创建动态链接库。


首先是生成module文件,也就是.o文件。这跟一般的unix没什么区别。例如
cc -c a.c b.c
就得到a.o和b.o


可以用ld来合并.o文件,比如
ld -r -o c.o a.o b.o
这个也没什么特别。


然后可以用libtool来创建动态链接库。
libtool -dynamic -o c.dylib a.o b.o


( 这里也可以用libtool -static -o c.a a.o b.o就创建静态库)


如果用gcc直接编译,我记得linux下一般是可以
gcc -shared -o c.so a.c b.c
而在Mac OS X下需要
gcc -dynamiclib -o c.dylib a.c b.c


这往往也是向Mac OS X移植unix程序常出问题的地方。如果用autoconf/automake等
工具,出错的几率应该小一些。


接着来看看访问动态链接库的工具。


nm是最常用的,这个用法跟linux下差不多
nm c.dylib
可以看到导出符号表,等等。


另一个常用的工具是otool,这个是Mac OS X独有的。比如想看看c.dylib的依赖关系
otool -L c.dylib


最后说一下我对Framework的理解。Framework是Mac OS X下必不可少的部分,不妨去
看看/System/Library/Frameworks/下面,一大堆Framework。Framework是dylib的进
一步演化,它把头文件、文档、动态链接库等整合成一个有机的目录,类似一种自描
述的方式,这种做法其实在Mac OS X下随处可见。比如应用程序,一般都是一个目录,
譬如/Applications/iTunes.app目录对应应用程序iTunes,双击这个目录即开始执行。
这种做法和Windows下常见的一个exe/dll打天下很不相同。


Framework的创建工具也是libtool,详细用法参考man。

相关文章
|
4月前
|
iOS开发 MacOS
MAC OS更新系统后IDEA中的SVN报错无法使用
MAC OS更新系统后IDEA中的SVN报错无法使用
|
2天前
|
Python
Mac上pyCharm找不到已安装的库
Mac上pyCharm找不到已安装的库
9 0
|
4月前
|
JSON JavaScript 前端开发
Mac系统Anaconda环境配置Python的json库
Mac系统Anaconda环境配置Python的json库
|
12月前
|
消息中间件 Dubbo 中间件
在 Docker 中运行 Mac OS 是什么样的体验?
在 Docker 中运行 Mac OS 是什么样的体验?
|
7月前
|
前端开发 安全 Go
在Mac OS X上运行Go语言的GUI程序
在Mac OS X上运行Go语言的GUI程序
201 3
|
11月前
|
iOS开发 MacOS
MAC OS更新系统后IDEA中的SVN报错无法使用
IntelliJ IDEA无法正常使用SVN 报Cannot run program “svn” (in directory “/XXXX/XXXX/XXXX/XXX”): error=2错误! 解决方法来了!
1034 0
|
机器学习/深度学习 人工智能 并行计算
闻其声而知雅意,M1 Mac基于PyTorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10)
前文回溯,之前一篇:[含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入)](https://v3u.cn/a_id_260),利用AI技术将文本合成语音,现在反过来,利用开源库Whisper再将语音转回文字,所谓闻其声而知雅意。
闻其声而知雅意,M1 Mac基于PyTorch(mps/cpu/cuda)的人工智能AI本地语音识别库Whisper(Python3.10)
|
Oracle Java 关系型数据库
珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)
也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语言榜首,其顶尖的霸主地位不可撼动,而M1 mac业已发布了一段时间,作为跨时代的顶级芯片系统,这两大巨头能否珠联璧合,让开发者们猛虎添翼、更上层楼?本次我们尝试在M1 mac系统中搭建Java开发环境,并且集成目前Web开发领域红的发紫的Springboot框架,另外,谁说玩儿Java就必须得用Eclipse或者IntelliJ IDEA?我们就骄傲地使用Vscode。
珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)
|
Shell 调度 iOS开发
奇技淫巧玄妙无穷| M1 mac os(苹果/AppleSilicon)系统的基本操作和设置
最近有个朋友跟我说,说他新入职了一家公司,公司还不错,给他配了一台Mac,但是呢他以前一直在Windows环境下开发,对Mac os并不了解,他感到很彷徨,所以本次呢,我们来分享一下,当手头儿有一部崭新的Mac,我们应该怎么上手操作和配置,让它成为我们开发的好帮手。
奇技淫巧玄妙无穷| M1 mac os(苹果/AppleSilicon)系统的基本操作和设置
|
机器学习/深度学习 机器人 PyTorch
金玉良缘易配而木石前盟难得|M1 Mac os(Apple Silicon)天生一对Python3开发环境搭建(集成深度学习框架Tensorflow/Pytorch)
笔者投入M1的怀抱已经有一段时间了,俗话说得好,但闻新人笑,不见旧人哭,Intel mac早已被束之高阁,而M1 mac已经不能用真香来形容了,简直就是“香透满堂金玉彩,扇遮半面桃花开!”,轻抚M1 mac那滑若柔荑的秒控键盘,别说996了,就是007,我们也能安之若素,也可以笑慰平生。好了,日常吹M1的环节结束,正所谓剑虽利,不厉不断,材虽美,不学不高。本次我们尝试在M1 Mac os 中搭建Python3的开发环境。
金玉良缘易配而木石前盟难得|M1 Mac os(Apple Silicon)天生一对Python3开发环境搭建(集成深度学习框架Tensorflow/Pytorch)