cx_freeze 链接到 /opt/local 中的库,而不是它复制的库
Posted
技术标签:
【中文标题】cx_freeze 链接到 /opt/local 中的库,而不是它复制的库【英文标题】:cx_freeze linking to libraries in /opt/local rather than the ones it copied over 【发布时间】:2015-06-11 09:51:42 【问题描述】:我在 Macports 和 Mac OS 10.10 上安装了 Python 3.4 和 cx_freeze 4.3.4,并构建了一个冻结的可执行文件。但是,在我的 Macports 安装中,/opt/local
中有几个链接库指向它们的路径。
来自otool -L:
Load command 7
cmd LC_LOAD_DYLINKER
cmdsize 32
name /usr/lib/dyld (offset 12)
Load command 8
cmd LC_UUID
cmdsize 24
uuid 2CE48062-D852-3DD1-B4BD-F5A60227CD19
Load command 9
cmd LC_VERSION_MIN_MACOSX
cmdsize 16
version 10.10
sdk 10.10
Load command 10
cmd LC_SOURCE_VERSION
cmdsize 16
version 0.0
Load command 11
cmd LC_MAIN
cmdsize 24
entryoff 5424
stacksize 0
Load command 12
cmd LC_LOAD_DYLIB
cmdsize 96
name /opt/local/Library/Frameworks/Python.framework/Versions/3.4/Python (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 3.4.0
compatibility version 3.4.0
Load command 13
cmd LC_LOAD_DYLIB
cmdsize 56
name /opt/local/lib/libintl.8.dylib (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 10.3.0
compatibility version 10.0.0
Python
libintl.8.dylib
和 libiconv.2.dylib
都与我冻结的应用程序一起复制,因此从 /opt/local
加载它们会破坏其他系统的可移植性。
dyld: Library not loaded:
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/Python
看来我不是唯一遇到此问题的人。
Pyinstaller 不支持 python3 并且 py2app 不适用于 curses 控制台应用程序,所以我真的需要它来工作。
【问题讨论】:
好像是你自己负责。这至少是我解释这个问题和关闭它的 PR 的方式:bitbucket.org/anthony_tuininga/cx_freeze/issue/31/… 没有提到 install_name_tool,但 initScript 似乎是你应该关注的东西。 【参考方案1】:查看https://github.com/auriamg/macdylibbundler,它是一个很好的工具,可以收集 Mac 上可执行文件的依赖项,并通过 install_name 工具更改 dylib 的路径。下载它,编译它,然后通过
将它应用到你的可执行文件中dylibbundler -od -b -x ./pathto/executable -p @executable_path/relativepathtoyourexecutable/libs/
github 上的 readme 也解释了所有参数。
【讨论】:
这是一个很好的解决方法。我更喜欢修复 cx_freeze,但我不是反对你的人。 是的,不知道,只是想帮忙:)以上是关于cx_freeze 链接到 /opt/local 中的库,而不是它复制的库的主要内容,如果未能解决你的问题,请参考以下文章
如何让 ruby-svm 在 macports 的 /opt/local 中查找库?
未加载库:/opt/local/lib/libssl.1.0.0.dylib (LoadError)