64ビットインストールで32ビットCygwinアプリケーションを実行できますか?

ジョアニス

64ビットインストールで32ビットCygwinアプリケーションを実行することは可能ですか?

動機:64ビットウィンドウのcygwin 1.7.26でrxvtネイティブユーティリティどこに行きましたか?で説明したように?rxvt-native、Windowsで私の好きな端末エミュレータは、現在、64のCygwinでは使用できません。私の望みは、64ビットLinuxディストリビューションで32ビットLinuxアプリケーションを実行できるのと同じように、64ビットCygwinで32ビットrxvtを実行できることです。

古いPCのC:\cygwin\binディレクトリから新しいPCのC:\cygwin64\usr\local\binディレクトリに実行可能ファイルをコピーしようとしましたが、実行できません。

プロセスを実行すると、サイレントに何も実行されません。

ldd いくつかの依存関係が欠落していることを教えてくれます:

$ ldd /usr/local/bin/rxvt-native.exe
        ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x7ffcb79b0000)
        ??? => ??? (0x77a10000)
        wow64.dll => /cygdrive/c/Windows/System32/wow64.dll (0x62c20000)
        wow64win.dll => /cygdrive/c/Windows/System32/wow64win.dll (0x62c80000)

cygwin1.dll32ビットシステムからファイルをコピーしようとしましたが、64ビットシステムを他のプロセスから隠さずに、このプロセスでのみファイルを使用できるようにする方法がわかりません。

次のオプションは、64ビットのcygwinをアンインストールして、32ビットのバリアントからやり直すことですが、それでも方法があることを望んでいます...ご協力いただきありがとうございます。

CristiFati

他のLnxディストリビューションと同様に、Cygwin 64エミュレーターでは、32ビットの実行可能ファイルを実行できます(互換性がある場合)。次のいずれかが必要です。

  • インストールされている適切なパッケージ
  • 適切な.dllは(あなたが述べたように)適切な場所にありますが、手動でコピーすることは(特にシステムの場所で)スケーラブルではなく、システムが後で適切に機能することを保証するものでもありません

まず、cygwin32パッケージを(少なくとも)インストールする必要があります。

Img0

私はあなたの持っていないので、32ビットの実行可能ファイルを(私が...ように、ダウンロードを検索開梱、とのように落ちていなかった)、私はあなたが必要と思い、それを実行するために(小さな例を作成したのgccツールチェーンを同様-私は他の目的のために持っていますが、とにかくこれは質問とは関係ありません)動作を再現します。

code.c

#include <stdio.h>


int main() {
    printf("\"void*\" is %d bits long.\n", sizeof(void*) * 8);
    return 0;
}

出力

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> uname -a
CYGWIN_NT-10.0 cfati-5510-0 2.11.2(0.329/5/3) 2018-11-08 14:34 x86_64 Cygwin
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ls
code.c
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> x86_64-pc-cygwin-gcc.exe -o exe-gcc-064.exe code.c
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> i686-pc-cygwin-gcc.exe -o exe-gcc-032.exe code.c -m32
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ls -al
total 433
drwxrwx---+ 1 Administrators None      0 Jan 16 12:45 .
drwxrwx---+ 1 Administrators None      0 Jan 16 10:33 ..
-rwxrwx---+ 1 Administrators None    118 Jan 16 10:39 code.c
-rwxrwxr-x+ 1 cfati          None 151062 Jan 16 12:45 exe-gcc-032.exe
-rwxrwxr-x+ 1 cfati          None 157755 Jan 16 12:45 exe-gcc-064.exe
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> file exe-gcc-064.exe
exe-gcc-064.exe: PE32+ executable (console) x86-64, for MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ldd exe-gcc-064.exe
        ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcaf990000)
        KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffcaf300000)
        KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffcabe60000)
        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ./exe-gcc-064.exe
"void*" is 64 bits long.
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> file exe-gcc-032.exe
exe-gcc-032.exe: PE32 executable (console) Intel 80386, for MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ldd exe-gcc-032.exe
        ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcaf990000)
        ??? => ??? (0x77150000)
        wow64.dll => /cygdrive/c/WINDOWS/System32/wow64.dll (0x7ffcaf800000)
        wow64win.dll => /cygdrive/c/WINDOWS/System32/wow64win.dll (0x7ffcad570000)
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ./exe-gcc-032.exe
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> echo $?
127

ご覧のとおり、exe-gcc-032.exeでまったく同じ問題が発生しました??? 依存関係は32ビットの cygwin1.dllです。問題を調べてみましょう:

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> find /usr -name cygwin1.dll
/usr/i686-pc-cygwin/sys-root/usr/bin/cygwin1.dll
/usr/bin/cygwin1.dll
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> cygcheck -f /usr/bin/cygwin1.dll
cygwin-2.11.2-1
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> file /usr/bin/cygwin1.dll
/usr/bin/cygwin1.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> cygcheck -f /usr/i686-pc-cygwin/sys-root/usr/bin/cygwin1.dll
cygwin32-2.10.0-1
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> file /usr/i686-pc-cygwin/sys-root/usr/bin/cygwin1.dll
/usr/i686-pc-cygwin/sys-root/usr/bin/cygwin1.dll: PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> echo ${PATH}
/usr/local/bin:/usr/bin:/cygdrive/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/WINDOWS/System32/WindowsPowerShell/v1.0:/cygdrive/c/Install/x64/NVidia/GPU Computing Toolkit/CUDA/AllVers/bin:/cygdrive/c/Install/x64/NVidia/GPU Computing Toolkit/CUDA/AllVers/libnvvp:/cygdrive/c/Install/x86/Borland/Delphi/7/Bin:/cygdrive/c/Install/x86/Borland/Delphi/7/Projects/Bpl:/cygdrive/c/ProgramData/Oracle/Java/javapath:/cygdrive/c/Program Files (x86)/Intel/iCLS Client:/cygdrive/c/Program Files/Intel/iCLS Client:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/cygdrive/c/WINDOWS/System32/OpenSSH:/cygdrive/c/Install/x86/IVI Foundation/VISA/AllVers/WinNT/Bin:/cygdrive/c/Program Files/IVI Foundation/VISA/Win64/Bin:/cygdrive/c/Install/x86/IVI Foundation/VISA/AllVers/WinNT/Bin:/cygdrive/e/Work/Dev/Utils/cfati-5510-0/windows:/cygdrive/c/Install/x64/NVidia/GPU Computing Toolkit/cuDNN/AllVers/bin:/cygdrive/c/Users/cfati/AppData/Local/Microsoft/WindowsApps:/cygdrive/c/Install/Qt/Qt/5.9.1/msvc2015/bin

したがって、32ビットの .dllは存在します(上記のパッケージによってインストールされます)が、そのディレクトリが$ {PATH}にないため、見つかりません(コンテンツの長さのため、これはすぐには表示されません)。このシナリオでCygwin$ {LD_LIBRARY_PATH}を尊重しないことに注意してください

明らかな手順は$ {PATH}先頭)にディレクトリを追加して、この.dllについてシステムに通知することです。

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> export PATH=/usr/i686-pc-cygwin/sys-root/usr/bin:${PATH}
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ./exe-gcc-032.exe
"void*" is 32 bits long.
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]> ./exe-gcc-064.exe
"void*" is 64 bits long.

そこに行きます。

最後の注意

  • 64ビットLDDある.exeが(上とは違っニックスそれはスクリプトだ、)、正常の依存処理しない32ビットのアーティファクトを。残念ながら、cygwin32-binutilsパッケージは、この問題が発生しない32ビットの対応物を提供していないため、現時点では、これは問題ありません。
  • cygwin1.dllバージョン(rxvt-native.exeが予期するものとシステムに存在するもの)の間に違いがある可能性があるため.exeの実行中にいくつかの問題が発生する可能性がありますその場合は、Cygwin 32環境を起動しcygwinパッケージバージョンを取得して$ {CYGWIN_PKG_VER}と呼びましょう)、Cygwin 64t環境で、$ {CYGWIN_PKG_VER}に最も近いcygwin32バージョンをインストールすることをお勧めします

@ EDIT0

テストプログラムにsystem("echo ${PATH}");(そして暗黙的に#include <stdlib.h>追加しましたが、32ビットバリアントでは、システム127を返しました適切なパスがない場合のexe-gcc-032.exeの終了コードと同様)。32ビットアプリケーションを起動すると、2は無関係ではなく、環境に何かが発生し、おそらくrxvt-nativeシステムを介してbash(またはその他のコマンド)を起動しようとします

@ EDIT1

したがって、Cygwin 64から32ビットアプリケーションを実行することは可能です(簡単なチェックでは、サポートされていない構成であることを示す公式のソースは明らかにされませんでした)。ただし、この特定のケースでは、アプリが複雑であるため(端末であり、他の複数のアプリケーションを実行する必要があります)、問題があります。さらに進むための可能な方法(他の人によって提案されたものもあります):

  • 手放す時間です(おそらく、移植されなかったのには十分な理由があります)。最新の代替品に切り替えます(Mintty
  • rxvtの非公式のビルド済み64ビットバージョンを検索するか、自分でビルドしてみてください(他にも気に入っている人がいます)
  • 両方の環境(Cygwin32Cygwin64)をPCにインストールします
    • お気に入りの端末(Cygwin 32から)を使用しますこれが「メイン」環境にな​​ります
    • Cygwin64を「リモート」で管理します
      • ssh同じマシン上で並行して実行されている2つのsshdに関する制限を確認しませんでしたが、制限がない場合は、そのうちの1つのリスニングポートをデフォルト( 22から変更する必要があります。前者についてはそうすることをお勧めします。そうすれば、後者はデフォルト設定を使用して「外部」から利用できます。
  • この方向性について研究を続けますが、私が見ているように、城のカードになり始めています(まだではない場合)-これは回避策のようです(gainarie

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

32ビットjdkと64ビットjreを使用して開発されたJavaプログラムを実行できますか?アプリケーションは32ビットの非Javaシステムライブラリを使用します

分類Dev

64ビットアプリケーションを32ビットOSにインストールできないのはなぜですか?

分類Dev

Debian Wheezy 64ビットで32ビットアプリケーションを実行する:ライブラリがありません

分類Dev

64ビットカーネル上の32ビットアプリケーションはすべてのメモリを使用できますか?

分類Dev

32ビットアプリケーションを64ビットOSで実行するにはどうすればよいですか?

分類Dev

32ビットアプリケーションで64ビット整数を使用しても大丈夫ですか?

分類Dev

32ビットアプリを搭載した64ビットマシンにインストールするvcredistパッケージは何ですか?

分類Dev

64ビットUbuntu16.04LTSで32ビットアプリケーションを実行しようとしています

分類Dev

Electron-Ubuntu64ビットでアプリケーションを実行できません

分類Dev

量子コンピューターで64ビットアプリケーションを実行できますか?

分類Dev

Ubuntu 32ビットを64ビットマシンにインストールできますか?

分類Dev

Ubuntu 32ビットを64ビットマシンにインストールできますか?

分類Dev

Kali 64ビットisoからインストールされたKaliは32ビットプラットフォームで実行できますか?

分類Dev

インストールされているアプリケーションが64ビットか32ビットかをすばやく確認する方法

分類Dev

perlまたはnekoで64ビットアプリケーションから32ビットライブラリを使用する

分類Dev

32ビットアプリケーションから64ビットライブラリを使用する

分類Dev

32ビットアプリケーションが64ビットLinuxでシステムコールを行う方法を教えてください。

分類Dev

32ビットアプリケーションで64ビットWindows7で2GB以上を使用できるようになりましたか?

分類Dev

インストールできるのに、なぜサービスまたはアプリケーションをドッキングするのですか?

分類Dev

インストールできるのに、なぜサービスまたはアプリケーションをドッキングするのですか?

分類Dev

32ビットマシンに64ビットバージョンのUbuntuをインストールできますか?

分類Dev

32ビットアプリケーションから64ビットアプリケーションのプロセス情報を取得する

分類Dev

32ビットシステムと64ビットシステムの両方でexeJavaアプリケーションを実行するにはどうすればよいですか?

分類Dev

32ビット共有オブジェクトで64ビットアプリケーションを実行している

分類Dev

64ビットWindowsマシンで32ビットRCPアプリケーションを起動できません

分類Dev

64ビットシステムでgcc-m32を使用してアプリケーションをコンパイルする

分類Dev

Delphi:アプリケーションがWin32 / Win64で実行されているかどうかを判断し、64ビットの場合は64ビットバージョンを自動的に起動する方法は?

分類Dev

64ビットJavaアプリ:64ビットOS、64ビットJRE、64ビットアプリケーションは必要ですか?

分類Dev

/ Homeを32ビット11.10バックアップから新しい64ビット12.04インストールに復元できますか?

Related 関連記事

  1. 1

    32ビットjdkと64ビットjreを使用して開発されたJavaプログラムを実行できますか?アプリケーションは32ビットの非Javaシステムライブラリを使用します

  2. 2

    64ビットアプリケーションを32ビットOSにインストールできないのはなぜですか?

  3. 3

    Debian Wheezy 64ビットで32ビットアプリケーションを実行する:ライブラリがありません

  4. 4

    64ビットカーネル上の32ビットアプリケーションはすべてのメモリを使用できますか?

  5. 5

    32ビットアプリケーションを64ビットOSで実行するにはどうすればよいですか?

  6. 6

    32ビットアプリケーションで64ビット整数を使用しても大丈夫ですか?

  7. 7

    32ビットアプリを搭載した64ビットマシンにインストールするvcredistパッケージは何ですか?

  8. 8

    64ビットUbuntu16.04LTSで32ビットアプリケーションを実行しようとしています

  9. 9

    Electron-Ubuntu64ビットでアプリケーションを実行できません

  10. 10

    量子コンピューターで64ビットアプリケーションを実行できますか?

  11. 11

    Ubuntu 32ビットを64ビットマシンにインストールできますか?

  12. 12

    Ubuntu 32ビットを64ビットマシンにインストールできますか?

  13. 13

    Kali 64ビットisoからインストールされたKaliは32ビットプラットフォームで実行できますか?

  14. 14

    インストールされているアプリケーションが64ビットか32ビットかをすばやく確認する方法

  15. 15

    perlまたはnekoで64ビットアプリケーションから32ビットライブラリを使用する

  16. 16

    32ビットアプリケーションから64ビットライブラリを使用する

  17. 17

    32ビットアプリケーションが64ビットLinuxでシステムコールを行う方法を教えてください。

  18. 18

    32ビットアプリケーションで64ビットWindows7で2GB以上を使用できるようになりましたか?

  19. 19

    インストールできるのに、なぜサービスまたはアプリケーションをドッキングするのですか?

  20. 20

    インストールできるのに、なぜサービスまたはアプリケーションをドッキングするのですか?

  21. 21

    32ビットマシンに64ビットバージョンのUbuntuをインストールできますか?

  22. 22

    32ビットアプリケーションから64ビットアプリケーションのプロセス情報を取得する

  23. 23

    32ビットシステムと64ビットシステムの両方でexeJavaアプリケーションを実行するにはどうすればよいですか?

  24. 24

    32ビット共有オブジェクトで64ビットアプリケーションを実行している

  25. 25

    64ビットWindowsマシンで32ビットRCPアプリケーションを起動できません

  26. 26

    64ビットシステムでgcc-m32を使用してアプリケーションをコンパイルする

  27. 27

    Delphi:アプリケーションがWin32 / Win64で実行されているかどうかを判断し、64ビットの場合は64ビットバージョンを自動的に起動する方法は?

  28. 28

    64ビットJavaアプリ:64ビットOS、64ビットJRE、64ビットアプリケーションは必要ですか?

  29. 29

    / Homeを32ビット11.10バックアップから新しい64ビット12.04インストールに復元できますか?

ホットタグ

アーカイブ