問題タブ [djgpp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DJGPPからMinGWへのカーネルプロジェクトの移植
MinGW&NASM(以前のDJGPP&NASM)でC++カーネルプロジェクトをコンパイルしようとしています。Cygwinも実際に試しましたが、以下の結果とまったく同じです。
- まず、に交換し
\DJGPP\bin
ました\MinGW\bin
。次のリンクエラーが発生しました:target coff-go32 not found.
- ターゲットを
elf32-i386
にスワップし、取得cannot perform PE operations on non PE output file 'build/kernel.elf'
しました。私の知る限り、「PE操作」を実行していないため、これは少し奇妙なエラーでした。 - ターゲットを再度変更し
pe-i386
、新しいエラーが発生しましたbuild/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'
MinGWがatexit
静的クラスの呼び出しを生成しているようです。DJGPPはしませんでした。カーネルは、シャットダウン中に独自のDTOR処理を行います。定義することでatexit
これが「解決」されることは承知していますが、それは現時点ではハックであり、長期的な解決策ではありません。むしろ、MinGWに既存のコードを(または最小限の)変更なしでコンパイルさせたいと思っています。
率直に言って、私はWindowsビルド環境にあまり詳しくないので、何をすべきかについてのヒントを使用できます。プロジェクト(上記の変更を除く)は、DJGPPで正常にコンパイルおよび起動されます。違いは、DJGGPとMinGWがコンパイル時のクラス宣言を処理する方法にあるようです。
編集:ついに故障し、Cygwin上にクロスコンパイラーを構築しました。すべてが現在機能しています。
compiler-construction - LD とリンクしようとすると MinGW for Windows が動作しません
私は現在 C でテスト OS を開発しています。Windows 7 (64 ビット) 用の MinGW を入手しました。チュートリアルにあるリンカー スクリプトとバッチ ファイルをセットアップして、NASM、GCC、および LD でビルドを自動化しました。.o ファイルを LD にリンクしようとすると、「ld: 非 PE 出力ファイルに対して PE 操作を実行できません」というメッセージが表示されます。なぜこうなった?
また、DJGPP の代わりに MinGW を使用する理由 (コンパイラの 2 ページ目に記載) は、Windows 64 ビットで動作するダウンロードが見つからなかったためです。16 ビット アプリケーションは Windows のバージョンと互換性がないというメッセージを受け取りました。
誰かがこれを手伝うことができれば...私は本当に感謝しています! :)
sqlite - djgppを使用してdosでsqlite3をコンパイルする
DOS で Sqlite の最新バージョンをコンパイルしたい。私が試したとき、私はlibsqlite3.aを作ることができました。それを機能させるためにfchown-stub.cを使用しましたが、それをshell.oにリンクしてexeを作ろうとすると、mmap undefinedおよびmunmap undefinedというエラーが発生しました。どちらも sys/stat.h で定義されています。mmap と munmap は Linux 固有のもので、equ はありません。ドスで。UNIX を dos に移植する際、多くのプログラマーが同じ問題に直面するはずです。この問題を解決する方法を教えてください。ありがとうございます。
dos - djgppでコンパイルされたharborexeは、純粋なdosでは実行されません
haarbourコンパイラを使用して1つのクリッパープログラムをコンパイルし、生成されたcファイルをdjgppを使用してコンパイルして最終的なexeを生成しました。このexeは、Windows 98のコンソールウィンドウで正常に実行されます。ただし、msdosプロンプトを終了するか、純粋なDOSで実行しようとしても、エラーは発生しません。しかし、それ以上は進みませんでした。ただし、numlockとcaplockは適切に応答します。ctrl + al + delを押すと、ユーザーによって終了されたメッセージhdpmiが表示されます。Hdpmi32の代わりにcwsdpmiを試しましたが、問題は同じです。スタンドアロンexeの代わりに生成された.hrbファイルへのインタプリタとして機能するexeHBRUN.exeがあります。HBRUnを純粋に実行すると、同じように動作しました。しかし、dbfファイルがない別のディレクトリを実行すると、dbfファイルが見つかりませんというエラーが表示されました。これはコンソールウィンドウでも正常に機能しますが、純粋なDOS用にコンパイルされています。harborとdjgppを使用して作成されたすべてのexeが大きい場合は、問題があると思います。1つの単純な5〜6行のプログラムの.hrbファイルがhbrunによって純粋なdosで正しく実行されました(hbrunのサイズは約1700 Kですが、私のexeファイルのサイズは950Kです。
dos - djgppを使用したdlopenへの未定義の参照
sqlite3 uding djgppをコンパイルしようとすると、dlopenへの未定義の参照、dlcloseへの未定義の参照、dlsymへの未定義の参照などのエラーが発生します。Linuxで-ldlを使用すると、問題は解決します。ただし、djgppで使用できるdl.aはありません。では、この問題を解決する方法は?
c - fscanf を使用して 2 行の整数を読み取る
Cで書いたものを聞きたいです。
このコマンドを使用して、fopen()
2 行しかないテキスト ファイルを開いて読み取ります。1 行目は N の整数で、2 行目は 1 行目に書かれている N の整数です。
例えば。
しかし、ファイルのopenend時に制限を取りたいです。
番号N
は の間にある必要があります1 ≤ Ν ≤ 1.000.000
。そうでない場合は、エラー メッセージを表示します。ファイルに問題がなければ、プログラムは別のコードで実行を続けます。
これが私が今までやったことです:
....
しかし、問題は、制限が最初の行番号のみをチェックすることです。それは正しいですが、2 行目の番号を読み取らないでください。
つまり10
、最初の行に数字があるとしましょう。コードは番号を分析し、制限をチェックして、「else」部分に進みます
..そして、すべてが機能していると言うでしょう。しかし20
、2 行目に数字がある場合はどうなるでしょうか。-必要なときだけ10
例えば。
だから私はできる限りクリアしたいと思っていました。私の質問は、最初の制限に加えて、最初の制限の下に別の制限があり、txtファイルの2行目を数字で読み取り、最初の数字と同じ数があるかどうかを確認するコードがプログラムに必要であることです。ラインは言う!
それ、どうやったら出来るの?他の宣言が必要な場合は、お気軽にお問い合わせください。私の問題が明確だったことを願っています:)
c - DOS での非対話型ドライブ リスト
DJGPP Cコンパイラを使用して、DOSのCプログラムから利用可能なすべてのドライブのリストを取得しようとしています(Windowsコマンドプロンプトではなく、実際のDOS 6.0を意味します)。
これを直接行うための API が見つからないので、ドライブ A から Z をループして、そこにあるかどうかをテストしようとしています。opendir
、access
およびを使用してこのテストを実行しようとしましstatfs
たが、3 つすべてで次のようなメッセージが表示されます。
ドライブから完全に非対話的に読み取ることができるかどうかを確認する方法はありますか? ディスクがロードされていないドライブが存在する場合、そのドライブが存在しないかのように動作して続行できるようにしたいだけです。
c - DOS ターゲットにコンパイルするには、Windows 7 64 ビット用の C コンパイラが必要です。
Windows 7 64 ビットから C コードを DOS 実行可能ファイルにコンパイルできるようにするソリューションを探しています。最近、XP 32 ビットから Win7 64 ビットに更新しましたが、Borland C++ 5.0 コンパイラが動作しなくなりました。tlink.exe 16 ビットを呼び出そうとするとエラーが発生します。XPを搭載した別のコンピューターを持ち込むことは避けようとしていますが、すぐに何か他のことがわからない場合は、それが私の行動方針でなければなりません.
私のターゲットは、FreeDOS を実行する組み込み x86 です。Linux に移行したいのですが、移行にかかる時間はありません。Linux を使用したことがないという学習曲線は別として、私のコードの多くは DOS に依存しており、書き直す必要があります。
変更できるウィンドウ設定があることを願っていますが、これまでの調査では、プロセスにもっと抜本的な変更が必要であると確信しています。私は、Turbo C 2.01、DJGPP、DOSbox を嗅ぎ回ったことがあります...外部からの入力がなければ、これらの路地を進む自信はあまりありません
c - DJGPP C で system() を使用して汎用ファイルを開く
ここで明らかな何かが欠けています。DJGPP C コンパイラを使用しています。実行可能ファイルは正常に開くことができますが、デフォルト プログラムのファイルを開くことはできません。
このコードを実行すると、電卓が起動します。電卓を閉じると、次のように報告されます。
したがって、他の 2 つのシステム コールに問題があります。システムコールに「START」を追加しようとしましたが、修正されません。Windows 7 Pro システムを検索したところ、START.EXE がありません。「cmd.exe」を追加するとcmdが起動するだけなので、引数が送信されていないかのようになります。
通常、cmd に「C:\TextFile.txt」と入力すると、内部で TextFile.txt が開かれた notepad.exe が開きます。
とにかく system() よりも安全なものを使用してこれを行うのが理想的ですが、DJGPP で ShellExecute の例を見たことがありません。
c - djgpp を使用して DOS で待機中 - ビジー待機の代替手段は?
私は最近ちょっとした curses ゲームを書きましたが、動作するために必要なのはタイマー メカニズムと curses の実装だけなので、DOS 用にビルドしてみるというアイデアは自然に思い浮かびます。curses はpdcurses
for DOS によって提供されます。
POSIX と Win32 では既にタイミングが異なるため、次のインターフェイスを定義しました。
ゲームは、ティックが必要になるとすぐにミリ秒間隔でticker_init()
and をticker_done()
1 回呼び出し、メイン ループで次のティックを待機します。ticker_start()
ticker_wait()
DOS で POSIX プラットフォームと同じ実装を使用するとsetitimer()
、 が機能しませんでした。理由の 1 つは、djgpp に付属する C lib が を実装していないことwaitsig()
です。そこで、DOS 用のインターフェースの新しい実装を作成しました。
これは魅力のように機能しdosbox
ます (私は現在、実際の DOS システムを持っていません)。しかし、私の懸念は次のとおりです。このプラットフォームでできる最善のことは本当に待っていることですか? CPUが少なくともいくらかのエネルギーを節約できるようにするソリューションが欲しいです。
参考までに全ソースを載せておきます。