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