Qt macOS 下动态库(dylib)正确的发布姿势是什么?

2018-08-17 11:43:13 +08:00
 nmgwddj

程序是一个动态库(用 Qt 静态编译出来的版本,所以比较大),编译出来有四个文件。

-rwxr-xr-x  1 myCode  staff    18M  8 17 10:41 libScreenshot.1.0.0.dylib
lrwxr-xr-x  1 myCode  staff    25B  8 17 10:41 libScreenshot.1.0.dylib -> libScreenshot.1.0.0.dylib
lrwxr-xr-x  1 myCode  staff    25B  8 17 10:41 libScreenshot.1.dylib -> libScreenshot.1.0.0.dylib
lrwxr-xr-x  1 myCode  staff    25B  8 17 10:41 libScreenshot.dylib -> libScreenshot.1.0.0.dylib

核心文件是 libScreenshot.1.0.0.dylib 其他都是它的链接文件。为了方便调用?那么问题来了。程序中直接 QLibrary library("libScreenshot"); 是失败的,因为找不到文件。

如果写死绝对路径是可以调用的。但是如果库提供给其他人使用呢?是不是要做一个什么脚本什么的把文件复制到系统某个目录而不需要指定绝对路径来让程序调用?

我试了手动 cp *.dylib 文件到 /usr/lib 是拒绝访问的,哪怕加了 sudo,查了下资料是要关闭 SIP 的,明显不是正确姿势:

sudo cp *.dylib /usr/lib
Password:
cp: /usr/lib/libScreenshot.1.0.0.dylib: Operation not permitted
cp: /usr/lib/libScreenshot.1.0.dylib: Operation not permitted
cp: /usr/lib/libScreenshot.1.dylib: Operation not permitted
cp: /usr/lib/libScreenshot.dylib: Operation not permitted

所以来这里请教大家,正确的发布姿势应该是怎样的?

4919 次点击
所在节点    Qt
6 条回复
kljsandjb
2018-08-17 12:22:33 +08:00
看看 DYLD 的一些 environment variable 可能就知道了 :)
nmgwddj
2018-08-17 13:46:04 +08:00
@kljsandjb 不是调用问题,是一个部署给他人使用的问题,我只需要发布几个 dylib 文件就行了?我觉得这不是正确姿势吧。别人拿过去还要自己折腾复制到什么系统目录才能用。
kljsandjb
2018-08-17 14:15:09 +08:00
我只试过放在 executable path,经验不够,帮不到了 :)
nmgwddj
2018-08-17 14:15:55 +08:00
@kljsandjb 谢谢帮主,macOS 下 executable path 不让随便复制文件,可能有一些其他的发布方法我不知道,所以来请教,谢谢你的思路。
kljsandjb
2018-08-17 14:19:47 +08:00
我说的 executable path 其实是个环境变量,可以自己设置的,比如 xxx.app 的可执行文件的目录在” MacOS ”目录下,那我一般把 dylib 也放在同目录下
kljsandjb
2018-08-17 14:25:43 +08:00
每个 app 的打包都有一个各自的 executable path,我也看到不少 app 的动态库放在这个下面,当然也可以放在其他地方,不管放在哪,环境变量 align 好设置好就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/480669

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX