cx_freeze链接到/ opt / local中的库,而不是通过

时间:2015-06-11 09:51:42

标签: python macos macports cx-freeze

我在Macports和Mac OS 10.10上安装了Python 3.4和cx_freeze 4.3.4,并构建了一个冻结的可执行文件。但是,一些链接库指向/opt/local中我的Macports安装路径。

来自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控制台应用程序,所以我真的需要这个才能工作。

1 个答案:

答案 0 :(得分:0)

查看https://github.com/auriamg/macdylibbundler,它是一个很棒的工具,可以在mac上收集可执行文件的依赖关系,并通过install_name工具更改dylib的路径。下载,编译并通过

将其应用于您的可执行文件

dylibbundler -od -b -x ./pathto/executable -p @ executable_path / relativepathtoyourexecutable / libs /

github上的自述文件也解释了所有参数。