#38163 closed defect (invalid)
py2app and macholib error
Reported by: | drsmith48@… | Owned by: | macports-tickets@… |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.1.3 |
Keywords: | Cc: | jmroot (Joshua Root) | |
Port: |
Description
Py2app and macholib raise the error "ValueError: New Mach-O header is too large to relocate". The patches for configure.ldflags in portconfigure.tcl described here
https://bitbucket.org/ronaldoussoren/py2app/issue/93/mach-o-header-may-be-too-large-to-relocate http://www.danplanet.com/blog/2009/02/15/using-py2app-with-gtk/ https://trac.macports.org/ticket/29838
do not fix the error. I suspect some ports override default configure.ldflags. Also, I think OpenCV triggers the same error:
Error stack:
WARNING: Mach-O header may be too large to relocate WARNING: Mach-O header may be too large to relocate Traceback (most recent call last): File "setup.py", line 26, in <module> setup_requires=['py2app'], File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup dist.run_commands() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands self.run_command(cmd) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command cmd_obj.run() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py2app/build_app.py", line 553, in run self._run() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py2app/build_app.py", line 741, in _run self.run_normal() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py2app/build_app.py", line 831, in run_normal self.create_binaries(py_files, pkgdirs, extensions, loader_files) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py2app/build_app.py", line 978, in create_binaries platfiles = mm.run() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/macholib/MachOStandalone.py", line 140, in run node.write(f) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/macholib/MachO.py", line 119, in write header.write(f) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/macholib/MachO.py", line 314, in write self.synchronize_size() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/macholib/MachO.py", line 304, in synchronize_size raise ValueError("New Mach-O header is too large to relocate") ValueError: New Mach-O header is too large to relocate drsmith$
py2app's full output is attached.
Env: python27, py27-py2app, py27-macholib on OSX 10.8.
Any guidance would be helpful. There seems to be lots of confusion about this in trac and stack overflow.
Thanks.
Attachments (1)
Change History (5)
Changed 12 years ago by drsmith48@…
comment:1 Changed 12 years ago by jmroot (Joshua Root)
Resolution: | → invalid |
---|---|
Status: | new → closed |
As explained in your links, there is nothing py2app can do about this. The relocated header cannot be larger than the original.
comment:3 Changed 12 years ago by jmroot (Joshua Root)
AIUI it's more like a limitation of the Mach-O format, in that to increase the size of the header you effectively have to re-link the file. So it could be viewed as a deficiency of macholib that it doesn't do that, but it's not like it's a simple fix, which is why install_name_tool can't do it either.
comment:4 Changed 11 years ago by spam4scott@…
For future reference. I had begun posting "Same problem as above. Earlier, editing portconfigure.tcl did the trick, but with the newer MacPorts I confirm that this does not fix it; i.e., error persists despite fresh clean/reinstall of MacPorts, rebuilding with -headerpad... in portconfigure.tcl "
...However, this is now...
RESOLVED: Posting solution for future users: The issue resulted from my default python installation somehow getting switched from the MacPorts version in /opt/local/bin to the Apple version in /usr/bin. (No idea how. Lion->Mountain Lion upgrade, perhaps?)
MacPorts now comes with the required -headerpad,etc. modifications, so if you are still encountering the error that started this thread, run "which python" and if you see "/usr/bin/python", then set your path so that it checks /opt/local/bin first.
With this change -- i.e., using the actual MacPorts python instead of the 'default' (duhhh) -- the build finishes successfully and the executable application runs without problem.
py2app output