cx_freeze linking to libraries in /opt/local rather than the ones it copied over

别来无恙 提交于 2019-12-07 21:20:14

问题


I installed Python 3.4 and cx_freeze 4.3.4 on Macports and Mac OS 10.10, and built a frozen executable. However, a couple of linked libraries are pointing to their paths on my Macports installation in /opt/local.

From 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

Both Python libintl.8.dylib, and libiconv.2.dylib were copied over alongside my frozen application, so loading them from /opt/local breaks portability on other systems.

dyld: Library not loaded:
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/Python 

It looks like I'm not the only one who has experienced this problem.

Pyinstaller does not support python3 and py2app does not work for curses console applications, so I really need this to work.


回答1:


Check out https://github.com/auriamg/macdylibbundler, it is a great tool to gather dependencies of an executable on mac and to change the paths of dylibs via the install_name tool. Download it, compile it, and apply it to your executable via

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

The readme on github also explains all parameters.



来源:https://stackoverflow.com/questions/30777340/cx-freeze-linking-to-libraries-in-opt-local-rather-than-the-ones-it-copied-over

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!