背景
最近在搞跨平台的客户端,主要是苹果电脑和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目录下的。
本文由 Ryan 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2023/12/05 23:37