V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nmgwddj
V2EX  ›  Qt

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

  •  
  •   nmgwddj · 2018-08-17 11:43:13 +08:00 · 5124 次点击
    这是一个创建于 2290 天前的主题,其中的信息可能已经有所发展或是发生改变。

    程序是一个动态库(用 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
    

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

    6 条回复    2018-08-17 14:25:43 +08:00
    kljsandjb
        1
    kljsandjb  
       2018-08-17 12:22:33 +08:00 via iPhone
    看看 DYLD 的一些 environment variable 可能就知道了 :)
    nmgwddj
        2
    nmgwddj  
    OP
       2018-08-17 13:46:04 +08:00
    @kljsandjb 不是调用问题,是一个部署给他人使用的问题,我只需要发布几个 dylib 文件就行了?我觉得这不是正确姿势吧。别人拿过去还要自己折腾复制到什么系统目录才能用。
    kljsandjb
        3
    kljsandjb  
       2018-08-17 14:15:09 +08:00 via iPhone
    我只试过放在 executable path,经验不够,帮不到了 :)
    nmgwddj
        4
    nmgwddj  
    OP
       2018-08-17 14:15:55 +08:00
    @kljsandjb 谢谢帮主,macOS 下 executable path 不让随便复制文件,可能有一些其他的发布方法我不知道,所以来请教,谢谢你的思路。
    kljsandjb
        5
    kljsandjb  
       2018-08-17 14:19:47 +08:00 via iPhone
    我说的 executable path 其实是个环境变量,可以自己设置的,比如 xxx.app 的可执行文件的目录在” MacOS ”目录下,那我一般把 dylib 也放在同目录下
    kljsandjb
        6
    kljsandjb  
       2018-08-17 14:25:43 +08:00 via iPhone
    每个 app 的打包都有一个各自的 executable path,我也看到不少 app 的动态库放在这个下面,当然也可以放在其他地方,不管放在哪,环境变量 align 好设置好就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:39 · PVG 17:39 · LAX 01:39 · JFK 04:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.