Py2app error for opencv / macports application. How to compile opencv with headerpad_max_install_names flag?

I am trying to create an application using opencv and pygame. These two libraries were installed using macports. I also installed py2app in macports python. I am running a simple py2app script

from setuptools import setup setup( app = [ '/full/path/to/my_script.py', ], options={ "py2app":{ 'argv_emulation': True, } }, setup_requires=['py2app'] ) 

Unfortunately, py2app does not work with the following error: "ValueError: new Mach-O header is too large to move"

Is it possible to create an application package with opencv and macports?

thanks for the help

Update:

Here is the answer from ronaldoussoren whoi, the py2app developer:

OSX shared libraries contain an absolute path to their location, and all libraries used are also referenced using an absolute path. Py2app uses macholib to rewrite these references to relative paths starting with '@executable_path'. For libraries located in / opt / local, the new path requires more space than the old, hence the error message. One way to provide ample space is to use the headerpad_max_install_names linker flag. I don't know how to tell darwinports to add this flag when creating opencv.

Also note that I have a similar problem with pyinstaller.

I tried to modify the opencv Portfile without any changes. I do not know where to add this linker flag.

Any idea how to fix this?

Update: here is my portfolio

 # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 # $Id: Portfile 99165 2012-10-28 22:56:03Z jeremyhu@macports.org $ PortSystem 1.0 PortGroup cmake 1.0 name opencv version 2.4.2 revision 2 categories graphics science license BSD platforms darwin maintainers nomaintainer description Intel(R) Open Source Computer Vision Library long_description opencv is a library that is mainly aimed at real time \ computer vision. Some example areas would be \ Human-Computer Interaction (HCI), Object Identification, \ Segmentation and Recognition, Face Recognition, Gesture \ Recognition, Motion Tracking, Ego Motion, Motion \ Understanding, Structure From Motion (SFM), and Mobile \ Robotics. homepage http://opencv.willowgarage.com/wiki/ master_sites sourceforge:project/opencvlibrary/opencv-unix/${version} use_bzip2 yes distname OpenCV-${version} checksums rmd160 496964503629b0ff4432fbdd276837ab3f134411 \ sha256 690023811e03e21df996291392fcf78e43e42ef557b9307503c74c74b4272c28 depends_build-append port:pkgconfig depends_lib-append port:zlib \ path:lib/libavcodec.dylib:ffmpeg \ port:libpng \ port:tiff \ port:jasper \ port:jpeg \ port:bzip2 \ port:openexr \ port:ilmbase \ port:eigen3 patchfiles patch-fix_dirname_case.diff \ patch-install_name.diff configure.args-append -DBUILD_NEW_PYTHON_SUPPORT=OFF \ -DBUILD_EXAMPLES=ON \ -DINSTALL_C_EXAMPLES=ON \ -DBZIP2_LIBRARIES=${prefix}/lib/libbz2.dylib \ -DZLIB_LIBRARY=${prefix}/lib/libz.dylib \ -DWITH_OPENEXR=ON \ -DWITH_1394=OFF \ -DWITH_EIGEN=ON \ -DEIGEN_INCLUDE_PATH=${prefix}/include/eigen3 \ -DBUILD_JASPER=OFF \ -DBUILD_JPEG=OFF \ -DBUILD_PNG=OFF \ -DBUILD_TIFF=OFF \ -DBUILD_ZLIB=OFF configure.ldflags-append "-Wl,-headerpad_max_install_names" # gcc-4.0 exits with a bus error if {${configure.compiler} == "gcc-4.0"} { configure.compiler gcc-4.2 if {![file executable ${configure.cc}]} { depends_build-append port:apple-gcc42 depends_skip_archcheck-append apple-gcc42 configure.compiler apple-gcc-4.2 } } platform darwin { if {${os.major} <= 9} { # Video Decode Acceleration Framework is not available patchfiles-append patch-highgui_CMakeLists.txt.diff } } post-destroot { xinstall -d ${destroot}${prefix}/lib/cmake move ${destroot}${prefix}/share/OpenCV/OpenCVConfig-version.cmake \ ${destroot}${prefix}/share/OpenCV/OpenCVConfig.cmake \ ${destroot}${prefix}/lib/cmake/ } variant dc1394 description {Use libdc1394 for FireWire camera. Breaks compatibility with Apple iSight FireWire camera.} { depends_lib-append port:libdc1394 configure.args-delete -DWITH_1394=OFF configure.args-append -DWITH_1394=ON \ -DHAVE_1394=ON } variant qt4 description {Use qt4 backend for graphical interface.} { PortGroup qt4 1.0 configure.args-append -DWITH_QT=ON } variant python26 conflicts python27 description {Add Python 2.6 bindings} { depends_lib-append port:python26 \ port:py26-numpy configure.args-delete -DBUILD_NEW_PYTHON_SUPPORT=OFF configure.args-append -DINSTALL_PYTHON_EXAMPLES=ON \ -DBUILD_NEW_PYTHON_SUPPORT=ON \ -DPYTHON_EXECUTABLE=${prefix}/bin/python2.6 \ -DPYTHON_LIBRARY=${prefix}/lib/libpython2.6.dylib \ -DPYTHON_INCLUDE_DIR=${frameworks_dir}/Python.framework/Versions/2.6/Headers \ -DPYTHON_PACKAGES_PATH=${frameworks_dir}/Python.framework/Versions/2.6/lib/python2.6/site-packages } variant python27 conflicts python26 description {Add Python 2.7 bindings} { depends_lib-append port:python27 \ port:py27-numpy configure.args-delete -DBUILD_NEW_PYTHON_SUPPORT=OFF configure.args-append -DINSTALL_PYTHON_EXAMPLES=ON \ -DBUILD_NEW_PYTHON_SUPPORT=ON \ -DPYTHON_EXECUTABLE=${prefix}/bin/python2.7 \ -DPYTHON_LIBRARY=${prefix}/lib/libpython2.7.dylib \ -DPYTHON_INCLUDE_DIR=${frameworks_dir}/Python.framework/Versions/2.7/Headers \ -DPYTHON_PACKAGES_PATH=${frameworks_dir}/Python.framework/Versions/2.7/lib/python2.7/site-packages configure.ldflags-append "-Wl,-headerpad_max_install_names" } variant tbb description {Use Intel TBB} { depends_lib-append port:tbb configure.args-append -DWITH_TBB=ON \ -DHAVE_TBB=ON \ -DTBB_INCLUDE_DIRS=${prefix}/include \ -DOPENCV_LINKER_LIBS="-ltbb -ltbbmalloc" } livecheck.type sourceforge livecheck.name opencvlibrary livecheck.regex /OpenCV-(\[0-9a-z.\]+)${extract.suffix} 

Update: the macport team worked on the problem, but unfortunately fixing them does not solve my problem. See http://trac.macports.org/ticket/36841

+4
source share
2 answers

You need to add

configure.ldflags-append "-Wl,-headerpad_max_install_names"

in the OpenCV Port file somewhere near the configure.args-append . ( Documentation )

Hope this fixes your issue. Otherwise, you may have to compile all OpenCV dependencies with this flag, which can be a lot of work. You can look at https://trac.macports.org/ticket/29838 if this is an event and you want the headerpad_max_install_names flag to be enabled by default.

If you want changes to your Portfile to be saved and not reverted the next time you open OpenCV, you can follow the instructions of the hidden fix source using Macports , however, this will prevent the automatic installation of OpenCV updates!

+4
source

Yesterday I found a solution with the py2app developer guide.

First, know that -Xlinker, -Wl and. -headpad ... flags did not fix the problem for me, although I still save them in macports.conf. The key for me was to increase the depth of the macports file and decrease the depth of the build directory file. Specifically, I install macports with the --prefix = / opt / localdepth / localdepth / localdepth / localdepth / local option, and I create / opt / build. Py2app is now successfully running.

See also: https://bitbucket.org/ronaldoussoren/py2app/issue/93/mach-o-header-may-be-too-large-to-relocate https://trac.macports.org/ticket/38163

+1
source

Source: https://habr.com/ru/post/1442872/


All Articles