0

GraphicsMagick と共に TclMagick 拡張機能を使用する Tcl スクリプトを作成しました。

GraphicsMagick には、Windows DLL と Linux SO ファイルの両方があります。これらのライブラリにバンドルされた 2 つの Starkit/Starpack アプリケーションを作成できるようにしたいと考えています。

これは合理的ですか?それはできますか?

編集

Windows で依存関係のある DLL を使用できないようです。私の場合、TclMagick 拡張機能を使用したいのですが、GraphicsMagick の DLL が必要であり、starkit はそれらを見つけることができません。この状況で私は何をすべきですか?

4

2 に答える 2

2

はい。のlib/tclmagickサブディレクトリに$starkit::topdir、動的ライブラリと、ライブラリである適切なpkgIndex.tclファイルを配置loadします。Makefile またはその他のビルド スクリプトを使用して、正しい動的ライブラリ ファイルを使用し、ターゲット プラットフォームに応じて pkgIndex を生成します。

ディレクトリ階層:

appname.vfs/
    main.tcl
    lib/
        app-appname/
            appname.tcl
            pkgIndex.tcl
        tclmagick/
            pkgIndex.tcl
            tclMagick.so

package require tclmagick「tclmagick」の大文字化については、期待どおりに機能します

于 2013-07-11T10:07:46.240 に答える
1

あなたはそれを行うことができますが、物事を適切に機能させるには、いくつかの追加の Windows トリックが必要になる場合があります。

Windows には依存ライブラリをロードするためのかなりの数のオプションがあります。このページでは基本について説明しています :

あなたを助けることができる1つの部分があります:

同じモジュール名の DLL が既にメモリにロードされている場合、システムは、ロードされた DLL を解決する前に、それがどのディレクトリにあるかに関係なく、リダイレクトとマニフェストのみをチェックします。システムは DLL を検索しません。

したがって、依存関係を正しく取得するには、最初に依存ライブラリをメモリにロードすることができます (残念loadながらこれを使用することはできませんが、twapi から何かを使用することができますtwapi::load_libary( http://wiki.tcl.tk/9886を参照) 。一時的な場所からロードされたライブラリ)。

悲しいことに、ほとんどの OS は動的ライブラリをメモリから直接ロードする簡単で移植可能な方法を提供していません。そのため、最初に依存ライブラリを一時的な場所にコピーする必要があります (適切なハックを使用するか、インストール可能なファイルシステムのようなものを使用して行うことができます)。 Windows/Linux 上の FUSE)。

ほとんどの場合、最も簡単な方法は、代わりにすべての依存関係を静的に拡張機能にリンクすることです。

于 2013-07-17T23:27:25.270 に答える