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.dyliblibiconv.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 中查找库?

查看lnmp 编译参数

未加载库:/opt/local/lib/libssl.1.0.0.dylib (LoadError)

升级到 Xcode 8 后出现 GCC 5.4 链接器错误

cx_Freeze:“没有名为‘编解码器’的模块”Windows 10

无法更改 Git 在 Mac 中的加载位置