4

もともと Linux 用に開発したライブラリがあります。現在、Cygwin への移植を進めています。Cygwin システムのすべてのライブラリが次のようにインストールされていることに気付きました。

  • DLL ( ) をモード 755cygfoo.dllにインストール/usr/bin
  • モード 644libfoo.aにインストールされた静的アーカイブ ( )/usr/lib
  • モード 755libfoo.dll.aにインストールされたインポート ライブラリ ( )/usr/lib

最初の 2 つは完全に理にかなっています。DLL は実行可能ファイルであるため、モード 755 である必要があります。静的アーカイブは実行可能ファイルではないため、モード 644 です。ただし、3 つ目は奇妙に思えます。インポート ライブラリは、実際には静的アーカイブであり、実行可能ファイルではありません (ar -t libfoo.dll.aアーカイブの内容を一覧表示します)。それらもモード644でインストールするべきではありませんか?

モード 755 でインポート ライブラリをインストールするのが Cygwin の規則であるのはなぜですか?

4

4 に答える 4

0

私に起こる唯一の答えは、インストーラーがファイル名で「.dll」文字列を探して、コピーされたファイルの実行可能属性(x)をアクティブ化することです.../。+\。dll$/を探しているはずです(最後にのみ.dll)。

OS /ファイルシステム間のインピーダンスの不一致により、インストーラー/コピー機がインストーラー操作で属性値を決定する戦略を持っていることは理解できます(属性リストをコピーされたファイルにマップする必要があるよりも簡単です...そしてWindowsのみ.exe、.com、および.dllを探す必要があります)

これを確認するには、「libfoo.dll.a」の名前を「libfoo.dxx.a」に変更してテストします...

于 2012-07-01T20:32:17.537 に答える
0

2000 年に戻る:

NTFS パーティションでは、プロセスの起動時に DLL をロードできるようにするために、NT/W2K は DLL の実行権限を必要とします。

使用している人が、使用していない人または FAT パーティションで圧縮しntsecた人によって圧縮された tar アーカイブを取得しない限り、それは問題ありません。ntsecCygwin は "exe"、"bat"、"com" のサフィックスに対してのみ実行権限を偽装するため、DLL が設定されていない場合、stat() 呼び出しによって実行可能ではないものとして扱われますntsec

使用者ntsecがその tar アーカイブを解凍すると、アーカイブからの DLL の 1 つを必要とするアプリケーションの開始が失敗し、Windows メッセージが表示されます。

「アプリケーションを正しく初期化できませんでした (0xc0000022)」

これはほとんどのユーザーにとって意味がありません。

この問題を解決するには、簡単な手順を実行する必要があります。ntsecDLLが設定されていない場合、またはファイル システムが ACL (FAT/FAT32) をサポートしていない場合に、DLL の偽の実行アクセス許可。

ここ: http://cygwin.com/ml/cygwin-developers/2000-10/msg00044.html

于 2012-07-02T09:25:13.737 に答える
-1

「.dll」を含むファイル名に対してこの動作を引き起こすのは、単なる怠惰なハックのようです。「修正」の背後にある理由については、hasanyasinの回答を参照してください(ここ)。

于 2012-07-02T12:24:23.347 に答える
-1

これはWindowsの要件です。.dllファイルには実行されるコードが含まれているため、実行可能ビットを設定する必要があります。

ファイルを実行する権限を削除すると、実行を実行するプロセスが分離している場合でも、Windowsはファイル内のコードを実行できなくなります。

補足:Windowsには+xビットがないというのはよくある誤解です。それは技術的には真実です。WindowsはPOSIXrwx権限を使用しませんが、Cygwinはそれらに似たインターフェイスを提供しようとします。ただし、Windowsはアクセス許可にACL(アクセス制御リスト)を使用しますが、これらには「アクセス許可の実行」という概念があります。これは、Cygwinが+xビットにマップするものです。

ソース/さらに読みたい場合は、これについてCygwinメーリングリストで長い議論があります。

于 2012-06-21T09:28:09.650 に答える