Mac下如何引入dylib?

/ Mac客户端 / 没有评论 / 245浏览

背景

最近在搞跨平台的客户端,主要是苹果电脑和Windows电脑。我的客户端是使用CEF3作为跨平台,我并没有把所有C++接口作为抽象层,写一份代码,平台代码分为平台代码。之后会抽象出来一份代码。虽然我的代码是CEF3,但是依赖的很多dylib,并且这些dylib是利用brew去安装的包,Mac客户端如何正确的带上dylib?

技术

1.首先我们要明白Mac下的依赖的包可以从某个包中查看出来

# install_name_tool -L xxx.dylib

输出的就是xxx.dylib依赖的包。

这时候就需要理解Mac下的@executable_path、@loader_path、@rpath

@executable_path
这个变量表示可执行程序所在的目录
@loader_path
这个变量表示每一个被加载的 binary (包括App, dylib, framework, plugin等) 所在的目录
@rpath
@rpath 和前面两个不同,它只是一个保存着一个或多个路径的变量

这三个变量的需要大家去自己写程序自己依赖包。

推荐:https://www.jianshu.com/p/be014d4c28c8

2.查看我们依赖的包之后,就可以从brew的安装目录下拷贝出来所有依赖包

建议这时候写脚本去寻找。

3.查找到包之后,包的依赖路径其实是不对的,是需要我们手动修改的。

# 更改本身依赖
install_name_tool -id @executable_path/demo /home/demo

# 更改其他动态库依赖
install_name_tool -change @rpath/demo2 @executable_path/demo2 /home/demo2

Mac客户端的目录结构一般是

XXX.app
	Contents
		Frameworks  # frameworks包或者一些单独依赖包
		MacOS       #运行二进制文件
		Resources   #资源文件

就需要根据这个目录手动改我们的依赖包路径和本身包路径。需要把二进制的依赖也更改掉。

不晓得Mac下的GStreamer.Frameworks是如何打包的,我是直接下载Gstreamer的安装包,安装之后,拷贝到Frameworks目录下的。

参考链接1 参考链接2 参考链接3