問題タブ [cc]
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.
compiler-construction - Solaris 5-10 CC Compiler の欠落シンボルのバグによりリンク障害が発生する
この質問の投稿がおなじみの場合は、お詫び申し上げます。昨日、この問題を投稿しました: Solaris 10 CC プリプロセッサのバグにより、未定義のシンボルが発生します。ただし、この投稿のみに表示される、いくつかの明確な情報 (昨日から学んだこと) を追加しました。
次のような非常に単純な C++ ファイルがあり、CC コンパイラを使用して Solaris 5-10 でコンパイルしています。私のファイル myTest.C のソース コードは次のとおりです。
最初にこのファイルに対して CC プリプロセッサを実行し、前処理されたファイルを調べてから、その前処理されたファイルをオブジェクト ファイルにコンパイルしたいと考えています。私はこれを「間接コンパイル」と呼んでいます。これを行うには、次のことを行います。
また、通常行われているように、別の前処理ステップなしでこのファイルをコンパイルしたいと思います。私はこれを「直接コンパイル」と呼んでいます。これを行うには、次のことを行います。
理論的には、myFile_direct.o と myFile_indirect.o は機能的に同等である必要があります。それぞれのシンボルテーブルに同じ数のシンボルが含まれているはずですよね? それでは、それらのシンボルを調べてみましょう:
驚いたことに、直接コンパイルされたオブジェクト ファイルには、間接的にコンパイルされたファイルにはない 12 個のシンボルが含まれています。なんで?これは私にとって深刻なバグのようです。これらのシンボルが間接的にコンパイルされたファイルにないのはなぜですか? 不要な場合、なぜ直接コンパイルされたファイルに含まれているのですか? 直接コンパイルは、最初に同じ前処理を行い、それをユーザーから隠すだけではないでしょうか? ここで何が起こっているのですか?
これらの不足しているシンボルにより、間接的にコンパイルされたオブジェクト ファイルの最終的なリンクが妨げられていることがわかります。しかし、直接コンパイルされたオブジェクト ファイルは問題なくリンクされます。
PS。12 個の余分な記号を認識できず、その目的が何であるかもわかりません。
c - char を "\n" 警告と比較する C: ポインターと整数の比較
私はCコードの次の部分を持っています:
コンパイル中にコンパイラが教えてくれる
問題は、置き換え"\n"
て'\n'
も警告がまったくないということです。誰でも理由を説明できますか?もう 1 つの奇妙な点は、ポインターをまったく使用していないことです。
私は次の質問を知っています
しかし、私の意見では、それらは私の質問とは無関係です。
PS。代わりに警告が表示さchar c
れる場合があります。int c
linker - Pythonモジュールのリンク:`ld`と`cc`のリンクの違い
これは機能します:
これは動作しません:
どちらの場合も、コンパイラ/リンクエラーは発生しません。ただし、インポートしようとすると、次のエラーが発生します。
なんで?2つの方法に違いはありますか?違いはなんですか?
debugging - gdb は cc によってコンパイルされたソース ファイルを見つけることができません
「Hello、World」を出力するだけのソースファイルtestcc.cがあります。以下のようにccでコンパイルします
実行するとうまくいきます。次のコマンドを使用して gdb でデバッグしたいと思います。
gdb からの出力を確認できます。
GDB はフリー ソフトウェアであり、特定の条件下でそのコピーを配布することを歓迎します。条件を表示するには、「showcopy」と入力します。GDB に対する保証はまったくありません。詳細については、「保証を表示」と入力してください。GDB 4.16 (sparc-sun-solaris2.6)、Copyright 1996 Free Software Foundation, Inc...
しかし、5行目にブレークポイントを設定しようとすると、次のメッセージが表示されました
問題は /home/users/xxx/C が現在の作業ディレクトリであり、ソース ファイルではないことです!
次に、 file:line-number オプションを使用してみます
そのため、以下のようにファイル名のフルパスを含めます
私は混乱しています.ファイルはそこにあります.なぜgdbはそれを見つけられないのですか? また、gdb の起動時にソース ファイルを検索するディレクトリを指定しようとします。
まだうまくいきません、何が問題ですか?
gcc - ubuntu で cc、gcc をコンパイルできません | そのようなファイル、又はディレクトリはありません
これには本当に助けが必要です。ccを使用してコンパイルしようとすると、表示されます
ただし、必要なすべてのファイル cc、gcc、c++ は /usr/bin ディレクトリにあります。gcc-multilib パッケージをインストールしようとした後、このエラーが発生しました。いくつかの重要なプログラムを実行しているため、できるだけ早く修正する必要があります。私がしたとき:update-alternatives --list cc
、それは示し/usr/bin/gcc
ました。私はそれから試しました update-alternatives --set cc /usr/bin/gcc
、それは与えました
update-alternatives: warning: forcing reinstallation of alternative /usr/bin/gcc because link group cc is broken. update-alternatives: warning: not replacing /usr/bin/cc with a link.
gcc - GCC、-W1 の意味
-W1 引数を使用している従来の Makefile がありますが、それへの参照が見つかりませんでした。「1」は「l」であると想定されているため、タイプミスである可能性があると思いました。ただし、機能します...では、この行が機能する理由を誰か説明できますか?
$(CC) は GCC で、コンパイルされたファイルは C ファイルです。このコマンドを使用して CPP ファイルをコンパイルしようとしたときにのみ、
c - Cygwinを使用したMPICH2コンパイルの問題
Cygwinを使用してWindowsマシンでMPICH2をコンパイルしようとしています。
関連情報のビット
- $ uname-> CYGWIN_NT-6.1
- $ gcc --version-> gcc(GCC)3.4.4(cygming special、gdc 0.12、using dmd 0.125)Copyright(C)2004 Free Software Foundation、Inc.これはフリーソフトウェアです。コピー条件については、ソースを参照してください。保証はありません。商品性や特定の目的への適合性についてもそうではありません。
- MPICH2バージョン:1.5
構成は適切に完了したようですが、コンパイル中に次のものを受け取りました。
'dbxerr.c'をチェックすると私はこれを見つけます:
'config.logをチェックすることにより、私は見つけました:
これにより、次のことが確認されます。
CPPによって使用されています。
'SIG_HANDLER_PROTOTYPE'は次のように定義されていることがわかりました。
'sighandler_t'は、'/usr/include/signal.h'で次のように定義されています。
最後に、「_sig_func_ptr」は次のように定義されます。
これは私自身の研究が私を連れて行った限りであり、私はそれらの部分を一緒に合わせることができないようです。プロトタイプの不一致がある理由がわかりません。私は自分でこの問題を修正しようと努力し続けますが、どんな助けもいただければ幸いです!
前もって感謝します!
アップデート:
'make'の出力を見直していたのですが、間違えたと思います。問題は宣言にあると思いました:
ただし、問題は次の定義にあるようです。
「sig」はint型のようですが、「SIG_HANDLER_PROTOTYPE」の型がわかりません。誰かがこれを説明できますか:
shared-libraries - -cの有無にかかわらず共有ライブラリをコンパイルする
Ctypes
私は、 Pythonにインポートする共有ライブラリとしてacプログラムをコンパイルしていました。これらは私が従うステップです:
共有ライブラリを作成するときは、コンパイル後にリンクされないため、使用しないことをお勧めし-c
ます(ここのいくつかの投稿で見ました。リンクを取得したら投稿します)。しかし、を削除すると-c
、これらのエラーがポップアップすることに気づきました。
だから私は追加-c
し、エラーはなくなりました。また、ctypesからも問題なくライブラリをインポートできます。これは後で問題を引き起こしますか?
-cを使用した場合と使用しない場合のコンパイルで発生する可能性のある問題は何ですか?
c - perror からのこの出力はなぜですか?
私は前にそれを見たことがない:
上の左下隅は何ですか? プログラムの最新バージョンは、
テスト
以下は、奇妙な出力を再現します。
アップデート
clang コンパイラは警告しますが、(g)cc は警告しません:
c - オブジェクトファイル名の指定方法
直感的にそのようなコマンドを実行しようとすると
次のエラーがスローされます
cc: 複数のファイルがある -c、-S、または -E で -o を指定することはできません