問題タブ [pelles-c]
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 - ペレス c では、windows.h はコンパイルされません。
私はペレスcを使用しています。このコードをコンパイルすると:
次のエラーが表示されます。
ご協力いただきありがとうございます。
c - ペレス c での奇妙な出力
出力:
0.000000
どうしてこうなった!
win 7でpelles cideを使用しています。
c - コードはコンパイラの最適化で動作しなくなる可能性があります
PellesC C コンパイラを使用しています。時々、コードがランダムに動作しなくなります。特定のステートメントがそれを引き起こす可能性があります。たとえば、変数に sin(c) (c は double) を掛けたところ、コードは実行を終了したように見え、結果はありませんでした。フリーズすることもあれば、戻ってくるように見えることもありますが、問題のあるステートメントを削除するか、コンパイラの最適化、具体的には「速度を最大化」または「速度をさらに最大化」を無効にすることで、いつでも修正できます。クラッシュするポイントの近くに printf ステートメントを追加すると、ほぼ 100% の確率でフリーズが解消されます。メモリに不適切にアクセスしていることを示唆するものは何も見つかりませんでした。コンパイラの問題であると確信しています。誰かがこれに光を当てることができるかどうか疑問に思っていました。私は、実際には、何か間違ったことをしていますか?それとも、これは Pelles C コンパイラの既知の問題ですか?
編集:
変化
to (最終行末の差分)
それを機能させます。
c - glBindBuffer を呼び出すと、atio6axx.dll でアクセス違反が発生するのはなぜですか?
問題に至るまで:
C を使用して OpenGL について学び、自分でデザインした (おそらく簡単な) タイルベースのゲームを作成します。最初は、テスト用に 10 個ほどの三角形しか描いていませんでしたが、バッファ データとインデックスを次のように設定しました。
より多くの三角形を作成するにはさらに多くの三角形が必要になるため、自動化することにしました (また、シェーダーでいくつかのマトリックスを使用するつもりであるため、値は画面/ビューポート座標ではなくピクセル単位です)。
この新しいデータから正確に同じ三角形を取得できることを確認したかったので、インデックスを自動化していないことに注意してください。
問題:
特定のGL 呼び出しでアクセス違反が繰り返し発生します。ブレークポイント間を手動で移動すると、 に達すると常に失敗しますglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, positionBufferObject);
。
この行に 1 つのブレークポイントがあり、この行の後に 1 つのブレークポイントがある場合、その間の行をスキップ (無視しますか? サイレントに失敗しますか?) しGLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);
、呼び出し内に到達すると中断しmyProgram = CreateProgram();
ます (私の頂点シェーダーは直前に同一の呼び出しで正常に動作します)。
すべての glGetError() は 0 を返します。これは、仕様によると、問題がないか、glGetError に独自のエラーが発生したことを意味します。
ただし、どこで壊れても、呼び出しスタック pelles C は、壊れたときに 'atio6axx.dll; を示します。DrvPresentBuffers() +163B7B' で、常にここにあります。
最近、Radeon HD 6850 用の最新の Catalyst アップデートをインストールしました。GPU/頂点バッファ オブジェクトなどに関するメモリの制限については何も見つかりません。また、25KB までのデータが何かの多くを壊すとは思えません。これは OpenGL の問題ではなく、コードの実装方法に問題があるか、慣れていない制限/メモリの問題であると感じています。
このサイトのポスター #20にも同様の問題がありますが、コードではなくプログラムの障害に関連しているようです (10 月 11 日に投稿されたにもかかわらず、最新のドライバーが公開される前に発生したと思います)。GetBitmap()
glBindTexture やその他の呼び出しを問題なく使用できます。
これは最も明白なように思えますが、古いアルゴリズムから新しいアルゴリズムに変更したのは、データ作成の自動化だけです。const float *
ポインターは関係ありません。また、コンパイラーが必要であると警告さえしなかった にキャストすることさえあります。
単純な問題の解決策を探すのに間違った場所を探していませんか? コードを説明したり、必要に応じてさらに追加したりしますので、お尋ねください。手動で ~6400 以上の値を書き出すのは本当に避けたいと思います。
編集#1:他のいくつかのテストの後、古い実装でもこのエラーが発生するようです。私はしばらくそれをコンパイルしていなかったに違いありません (別のファイルであるシェーダーに取り組んでいました)。私はとても混乱しています。
編集#2:さらにコード。これは、InitGL の前に発生する唯一の関数であり、InitGl を呼び出す関数です。:
FnLdInit は、すべての拡張機能を接続する場所です。
GetBitmap() は次のとおりです。
編集 #3 : アンインストールされた Catalyst 12.10 および関連するすべてのドライバー。12.8を再インストールしました。同じ問題ですが、現在は GenBuffers で発生しています。奇数。
編集 #4 : プロジェクトを 32 ビットにしてコンパイルしてみました。まったく同じ問題が発生しますが、なんらかの理由で Pelles C が LIB にラベルを付けていないため (言及するたびに「無題」と表示されます)、AMD が提供する 32 ビット lib も失敗しているとしか思えません (atio6axx.dll/. lib がロードされていません)。この問題は、私のコードではなくドライバーに起因しているように見えるため、実際の解決策はないと感じています。このような関連する問題を検索して確認した後、実際にはクライアント側の解決策はないようです。
編集#5:この時点でプログラムがアクセス違反を発生させなかったため、以前は気付かなかった別の問題は、コードが到達glActiveTexture(GL_TEXTURE0);
して突然すべての行をスキップして関数を終了することです。この行を削除すると、次の行が実行されます。glActiveTexture(GL_TEXTURE0);
は from ですがatio6axx.dll
、それ以外のコマンドはすべて fromOPENGL32.dll
であるため、絞り込んだようです。奇妙なのは、この時点でアクセス違反がなく、奇妙なスキップがあることです。
これが起こった理由を誰も理解できないと思いますか?15\11\2012 (先週の木曜日) のバージョン atio6axx.dll を持つベータ版の Catalyst ドライバーもインストールしました。したがって、最新のドライバーは問題ではありません。Catalyst 12.4 (現在は 12.10 で、このプログラムは 12.8 で実行されました) 以降、すべてのドライバー バージョンを試しました。途方に暮れ、新しいプログラムでさえ同じ問題に遭遇します。
c - CおよびWindowsVistaのDos.h+Pc.h
私は現在、Mesa3Dと連携して、OpenGLでソフトウェアレンダリングされたグラフィックアプリケーションを作成することを検討しています。
私は今それを使用する方法についていくつかのチュートリアルを探しています、そして多くはDOSまたは古いバージョンのWindowsを念頭に置いて書かれています。Vistaを実行しているので、必要なファイルがないようです。
私が使用しているMesa3Dチュートリアルでは、使用方法outportb()
や、機能していないように見える他のいくつかのコマンドを使用しています。周りを見回した後、2つのインクルードファイルが必要であることがわかりました。
- dos.h
- pc.h
これらは、Visual Studio 2010(Express)に付属しているWindowのSDKや、現在使用している古いバージョンの2005(Professional)には含まれていないようです。
これらは、DOSでのみ動作し、互換性モードであってもVistaではサポートされていないDJGPPコンパイラで検出されるようです。DosBoxを実行しても、これは機能しません。
私は疑問に思っています-おそらく新しい関数が置き換えられますoutportb
か、またはこれらのDJGPPファイルをVSまたはPellesC(Cのみのプログラムに適しています)を使用したC / C ++コンパイラで使用できますか?
さらに、VSとPellesCの両方で持っているconio.htextmode()
インクルードファイルには機能がありませんが、DJGPPバージョンには機能があります。
誰かがDJGPPをVistaで動作させるか、DJGPPのdos、pc、conio.hファイルをVSまたはPellesCのいずれかで使用できるようにするのを手伝ってくれるなら、それは大きな助けになるでしょう!
c - POLINK:エラー: 未解決の外部シンボル。ペレス C
私はプログラミングが初めてです。Pelles C ide を使用して C をコンパイルしていますが、昨日は機能していましたが、現在このエラーが発生しています。
プロジェクトのコードは次のとおりです。
}
このエラーの原因は何ですか?
これもある、以前はあった記憶がない
c - Pelles C と GCC は、この C 素数テストで異なる結果を出します
このコンパイラでこのコードをコンパイルします。番号については、18446744073709551615 (2^64-1) と書きます。Pelles の実行可能ファイルは「18446744073709551615 は素数です」と言っていますが、GCC の実行可能ファイルは「18446744073709551615 は素数ではありません」と言っています。なぜ結果が異なるのですか?
編集:
私がテストしたところ、gcc は 12 を返し、pelles c は sizeof(long double) に対して 8 を返しました。
c - ./folder? に相当する C 言語
私は Pelles C で C プロジェクトに取り組んでおり、プロジェクト フォルダーのサブディレクトリ内の csv ファイルを fopen しようとしています。現在、次のようなファイルへの絶対パスがあります。
これは問題なく動作します。しかし、プロジェクト フォルダーを移動するとき (たとえば、F:/ USB ドライブから C:/ ハードドライブ) にコードを適応させたいと考えています。プロジェクト フォルダを移動するたびに絶対ファイル パスを変更せずにこれを行う方法があるかどうかを知りたいです。
基本的に、Linuxのように「現在のディレクトリ/データフォルダー」(「./データフォルダー」)をどのように言うか疑問に思っています。私がテストしたが機能しない次の行のようなもの:
また
考え?
c - Pelle C IDE でコンポーネントを削除または非表示にする方法
ウィンドウからいくつかのコンポーネント (ボタン、コンボボックスなど) を削除または非表示にしたい。どうやってやるの?