5

私はghc 7.6.3を使用しています。ここから wxHaskell をインストールしました: https://github.com/wxHaskell/wxHaskell

それは機能し、サンプルプログラムはコンパイルされ、正常に実行されました。

唯一の問題は、mac OS X で wxHaskell アプリケーションを配布したいということです。 macosx-app と cabal-macosx ( https://github.com/michaelt/cabal-macosx ) を使用して「アプリ」ファイルを作成してみました. 私のマシンでは問題なく動作しますが、別のコンピュータでは実行できません。次のエラーが表示されます。

Dyld Error Message: Library not loaded: /Users/user/.cabal/lib/wxc-0.90.1.0/ghc-7.6.3/libwxc.dylib.

私は OS X 10.8.4 (Mountain Lion) を使用していますが、Windows でアプリをコンパイルして再配布することにも興味があります。

wxHaskell アプリを再配布する最良の方法は何ですか?

Setup.hs

-- Example Setup.hs for the wxHello app.

import Distribution.MacOSX
import Distribution.Simple

main :: IO ()
main = defaultMainWithHooks $ simpleUserHooks {
         postBuild = appBundleBuildHook guiApps -- no-op if not MacOS X
       }

guiApps :: [MacApp]
guiApps = [MacApp "WxHello"
                  (Just "resources/WxHello.icns")
                  Nothing -- Build a default Info.plist for the icon.
                  [] -- No other resources.
                  [] -- No other binaries.
                  ChaseWithDefaults -- Try changing to ChaseWithDefaults
          ]

wxHello.cabal:

Name:                   wxHello
Version:                0.1.0
Stability:              Alpha
Synopsis:               wxWidgets `Hello World' example for cabal-macosx
Description:
    Example showing how to use cabal-macosx to build an application
    bundle for a simple `Hello World' program using the wxWidgets GUI
    toolkit.
Category:               Data
License:                BSD3
License-file:           LICENSE
Copyright:              Andy Gimblett <haskell@gimbo.org.uk>
Author:                 Andy Gimblett <haskell@gimbo.org.uk>
Maintainer:             Andy Gimblett <haskell@gimbo.org.uk>
Build-Type:             Custom
Cabal-Version:          >=1.6

Executable WxHello
  hs-source-dirs:       src
  Main-is:              Main.hs
  Build-Depends:        base >= 3 && < 5, cabal-macosx, wx
  ghc-options:          -fwarn-tabs -threaded -Wall

生成されたパッケージ内の dylib ファイルは次のとおりです。

WxHello.app $ find . | grep dylib
./Contents/Frameworks/Users/user/.cabal/lib/wxc-0.90.1.0/ghc-7.6.3/libwxc.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_baseu-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_baseu_net-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_baseu_xml-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_adv-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_aui-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_core-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_gl-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_html-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_propgrid-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_qa-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_ribbon-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_richtext-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_stc-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_webview-2.9.5.0.0.dylib
./Contents/Frameworks/Users/user/temp/wxWidgets-2.9.5/build-release/lib/libwx_osx_cocoau_xrc-2.9.5.0.0.dylib
./Contents/Frameworks/usr/lib/libc++abi.dylib
./Contents/Frameworks/usr/lib/libexpat.1.dylib
./Contents/Frameworks/usr/lib/libiconv.2.dylib
./Contents/Frameworks/usr/lib/libstdc++.6.dylib
./Contents/Frameworks/usr/lib/libz.1.dylib
4

2 に答える 2

0

.cabal および Setup.hs ファイルを含めると役立つ場合があります。

cabal-macosx のドキュメントから、再配布可能なアプリ バンドルを構築するには、 Setup.hsの MacApp データ値が ChaseDeps の適切なモードを取得するようにする必要があるようです( DoNotChase の代わりに ChaseWithDefaults を使用ます) 。

それを行っても同じエラーが発生する場合は、結果のアプリ バンドル内をチェックして、必要なライブラリがそこにコピーされているかどうかを確認します。cabal-macosx メンテナーにバグを報告するのに十分な情報が見つかるかもしれません。

編集

あなたが含めたものに基づいて、セットアップは正しく見え、少なくともライブラリの依存関係をコピーしたようです。問題はおそらく cabal-macosx パッケージにあると思います。

ソース コードから依存関係修正コードを見ると"Updating <library>'s dependence on <path> to <path>"、バンドルをビルドしていたときに大量の行を出力する必要があるように見えます。それらを見ましたか?バイナリ自体を更新する行はありましたか?

私は OS X のリンク プロセスの経験はあまりありませんが、ライブラリをコピーしたにバイナリがリンクされない限り、バイナリも更新する必要があると思います。インストールプロセスが見逃した可能性のあるバイナリのパスを使用/usr/bin/otool -L <filename>して手動で修正できるはずです。/usr/bin/install_name_tool

これら 2 つのツールのマニュアル ページは次のとおりです。

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/install_name_tool.1.html

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/otool.1.html

于 2013-08-08T17:53:19.373 に答える