4

opencv と pygame を使用してアプリを構築しようとしています。これら 2 つのライブラリは、macports とともにインストールされています。また、macports python に py2app をインストールしました。シンプルなpy2appスクリプトを実行しています

from setuptools import setup

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

残念ながら、py2app は次のエラーで失敗します:「ValueError: New Mach-O header is too large to relocate」

opencv と macports でアプリバンドルを作成することは可能ですか?

ご協力いただきありがとうございます

アップデート:

py2app 開発者である ronaldoussoren の回答は次のとおりです。

OSX 上の共有ライブラリには、その場所への絶対パスが含まれており、同様に、使用されているすべてのライブラリも絶対パスを使用して記述されています。Py2app は macholib を使用して、これらの言及を「@executable_path」で始まる相対パスに書き換えます。/opt/local にあるライブラリの場合、新しいパスは古いパスよりも多くのスペースを必要とするため、エラー メッセージが表示されます。十分なスペースがあることを確認する 1 つの方法は、リンカー フラグ「headerpad_max_install_names」です。opencv をビルドするときに、このフラグを追加するように darwinports に指示する方法がわかりません。

また、pyinstaller にも同様の問題があることに注意してください。

何も変更せずにopencv Portfileを変更しようとしました。このリンカ フラグを追加する場所がよくわかりません。

それを修正する方法はありますか?

更新: ここに私の Portfile があります

# -*- 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}

更新 : macport チームが問題に取り組みましたが、残念ながら彼らの修正は私の問題を解決しません。http://trac.macports.org/ticket/36841を参照してください。

4

2 に答える 2

4

追加する必要があります

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

行の近くのどこかの OpenCV Portfile でconfigure.args-append。(ドキュメンテーション)

これで問題が解決することを願っています。そうしないと、そのフラグを使用して OpenCV のすべての依存関係をコンパイルする必要が生じる可能性があり、これは大変な作業になる可能性があります。その場合は、https: //trac.macports.org/ticket/29838 を参照して、デフォルトで headerpad_max_install_names フラグを有効にしたい場合があります。

Portfile への変更を保持し、OpenCV の次の更新時に元に戻さない場合は、Sneaky patching source with Macportsの指示に従ってください。ただし、これにより、OpenCV の更新が自動的にインストールされなくなります。

于 2012-11-01T10:16:02.813 に答える
1

昨日、py2app開発者からのガイダンスで解決策を見つけました。

まず、-Xlinker、-Wl、および。-headpad ...フラグは私にとって問題を修正しませんでしたが、私はまだmacports.confにそれらを保持しています。私にとっての鍵は、macportsファイルの深さを増やし、ビルドディレクトリファイルの深さを減らすことでした。具体的には、-prefix = / opt / localdepth / localdepth / localdepth / localdepth / localを指定してmacportsをインストールし、/ opt/buildにビルドします。これで、py2appが正常に実行されます。

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

于 2013-02-23T13:07:42.577 に答える