关于macos:install

您所在的位置:网站首页 dylib怎么安装 关于macos:install

关于macos:install

2023-09-30 00:44| 来源: 网络整理| 查看: 265

我有一个安装在/PATH/lib中的动态libray libtest.dylib,以及一个执行二进制文件myapp,它使用安装在/PATH/bin中的dylib。

我可以运行myapp来找到dylib,如下所示(在Mac OS X上使用DYLD_LIBRARY_PATH可以吗?动态库搜索算法有什么用?):

1DYLD_LIBRARY_PATH="/PATH/lib" myapp

我想我可以使用install_name_tool来更新库和可执行文件,以便可以使用rpath找到该库。我在这篇文章中使用了提示-如何在dylib中指定rpath?

在lib中,我执行了此命令以添加rpath。

12install_name_tool -id"@rpath/libtest.dylib" libtest.dylib install_name_tool -add_rpath"@executable_path/../lib/" libtest.dylib

在bin中,我执行了install_name_tool -add_rpath"@executable_path/../lib/" myapp。

但是,当我在bin目录中执行myapp时,出现错误消息。

1234dyld: Library not loaded: libtest.dylib   Referenced from: /PATH/bin/./myapp   Reason: image not found Trace/BPT trap: 5

otool -l myapp显示rpath在myapp中已正确更新。

1234Load command 16           cmd LC_RPATH       cmdsize 40          path @executable_path/../lib/ (offset 12)

libtest.dylib也是如此

1234Load command 13           cmd LC_RPATH       cmdsize 40          path @executable_path/../lib/ (offset 12)

可能是什么问题?

添加

当然,在编译和链接时我可以使用cc -install_name,但是我想知道如何在修改生成的dylib和执行二进制文件时做同样的事情。

从库:

1cc -install_name"@loader_path/../lib/libtest.dylib" -dynamiclib -o libtest.dylib test.c

或者,install_name可以使用@rpath:

1cc -install_name"@rpath/libtest.dylib" -dynamiclib -o libtest.dylib test.c

从垃圾箱:

12cc -I../lib -c main.c cc -o main main.o ../lib/libtest.dylib -Wl,-rpath -Wl,@loader_path/../lib

或仅一行:

1cc -I../lib -L../lib -o main main.c -ltest -Wl,-rpath -Wl,@loader_path/../lib

从otool -l,我分析了应在原始库和二进制文件中添加或修改的内容。

Dylib

更改在id中:

12345678910Load command 2


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3