タグ付けされた質問 「gcc」

GCCはGNUコンパイラコレクションです。Linux上のC、C ++、Go、Fortran、Adaの事実上の標準コンパイラであり、他の多くの言語やプラットフォームもサポートしています。コンパイラとは別に、GCCにはいくつかのプラットフォームやシステムで広く使用されているツールチェーン(libc、libstdc ++、objdump、nmなど)があります。

13
std :: type_info :: nameの結果の展開
私は現在、とりわけ、呼び出し元の関数に関する情報を出力することになっているいくつかのロギングコードに取り組んでいます。これは比較的簡単なはずtype_infoです。標準のC ++にはクラスがあります。これには、typeidされたクラス/関数/などの名前が含まれます。しかし、それは壊れています。あまり役に立ちません。すなわちtypeid(std::vector<int>).name()戻りますSt6vectorIiSaIiEE。 これから何か有用なものを生み出す方法はありますか?同様にstd::vector<int>、上記の例のために。テンプレート以外のクラスでのみ機能する場合も問題ありません。 ソリューションはgccで機能するはずですが、移植できればより良いでしょう。これはロギング用であるため、オフにできないことはそれほど重要ではありませんが、デバッグには役立ちます。
93 c++  gcc  name-mangling 

9
編集したくないサードパーティのコードでgccから出てくる未使用の変数の警告を無効にするにはどうすればよいですか?
未使用の変数の警告をオフにするためにgccコンパイラーに渡すスイッチを教えてください。Windowsのブーストでエラーが発生し、ブーストコードに触れたくありません。 C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 両方-Wunused-valueを使用しようとしました-Wno-unused-valueが、どちらも上記のメッセージを抑制しませんでした。 正しいコマンドは何ですか、これが私のコンパイル行です: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated -IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE …

7
実行可能ファイルを毎時間実行するようにcronジョブを設定するにはどうすればよいですか?
1時間ごとにgccを使用してコンパイルされた実行可能ファイルを実行するcronジョブを設定する必要があります。 rootとしてログインして入力しました crontab -e 次に、以下を入力してファイルを保存しました。 0 * * * * /path_to_executable ただし、cronジョブは機能しません。 入力する/...path_to_executableと、セグメンテーション違反が発生します。実行可能ファイルは、それが置かれているフォルダーからしか実行できません。この問題を解決する方法はありますか?
92 c  linux  gcc  cron  crontab 

9
変更されたヘッダーファイルを含むソースファイルをMakefileが自動的に再構築する方法を教えてください。(C / C ++の場合)
私が取り組んでいるプログラム(実際にはカーネル)をビルドするために使用する次のmakefileがあります。ゼロから、そして私はプロセスについて学んでいるので、完璧ではありませんが、メイクファイルを書く私のレベルの経験には、現時点で十分強力であると思います。 AS = nasm CC = gcc LD = ld TARGET = core BUILD = build SOURCES = source INCLUDE = include ASM = assembly VPATH = $(SOURCES) CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \ -nostdinc -fno-builtin -I $(INCLUDE) ASFLAGS = -f elf #CFILES = core.c consoleio.c system.c CFILES …

6
GCCでプリコンパイルされたヘッダー
誰もがGCCで動作するプリコンパイル済みヘッダーの取得に成功しましたか?私は私の試みで運がなかったし、それを設定する方法の多くの良い例を見たことがありません。私はcygwin gcc 3.4.4を試し、Ubuntuで4.0を使用しました。

5
gcc-ggdbとgcc-gの違いは何ですか
gccを使用してCプログラムをコンパイルするとき、私は通常、-gいくつかのデバッグ情報をelfファイルに取得して、必要に応じてgdbが役立つようにします。 ただし、-ggdbデバッグ情報をよりgdbに適したものにすることになっているため、一部のプログラムがを使用していることに気付きました。 それらはどのように異なり、どちらを使用することをお勧めしますか? 注:プログラムまたはGCCをデバッグするためのオプションへのリンク、http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
91 gcc  gdb 

3
<ランダム>はLinuxでは同じ数を生成しますが、Windowsでは生成しません
以下のコードは、間隔[1,100]の5つの疑似乱数のリストを生成することを目的としています。default_random_enginewith をシードしtime(0)ます。これは、システム時間をUNIX時間で返します。Microsoft Visual Studio 2013を使用してWindows 7でこのプログラムをコンパイルして実行すると、期待どおりに動作します(以下を参照)。しかし、g ++コンパイラーを備えたArch Linuxでそうすると、奇妙な動作をします。 Linuxでは、5つの数値が毎回生成されます。最後の4つの数値は実行ごとに異なります(よくあることです)、最初の数値は同じままです。 WindowsおよびLinuxでの5回の実行の出力例: | Windows: | Linux: --------------------------------------- Run 1 | 54,01,91,73,68 | 25,38,40,42,21 Run 2 | 46,24,16,93,82 | 25,78,66,80,81 Run 3 | 86,36,33,63,05 | 25,17,93,17,40 Run 4 | 75,79,66,23,84 | 25,70,95,01,54 Run 5 | 64,36,32,44,85 | 25,09,22,38,13 謎に加えて、その最初の数はLinuxでは定期的に1ずつ増加します。上記の出力を取得した後、約30分待って、最初の数値が変更され、常に26として生成されていることを再度確認しました。定期的に1ずつ増加し続け、現在は32になっています。の値が変化しますtime(0)。 最初の数値が実行間でめったに変化しないのはなぜですか?その後、変化すると、1ずつ増加しますか? コード。5つの数値とシステム時刻をきちんと出力します。 #include &lt;iostream&gt; …

5
libstdc ++を静的にリンクする:何か落とし穴はありますか?
Ubuntu12.10で構築されたC ++アプリケーションとGCC4.7のlibstdc ++を、かなり古いバージョンのlibstdc ++が付属しているUbuntu10.04を実行しているシステムにデプロイする必要があります。 現在、-static-libstdc++ -static-libgccこのブログ投稿で提案されているように、私はコンパイルしています:libstdc ++を静的にリンクします。著者は、libstdc ++を静的にコンパイルするときに、動的にロードされたC ++コードを使用しないように警告しています。これは、私がまだチェックしていないことです。それでも、これまでのところすべてが順調に進んでいるようです。Ubuntu10.04でC ++ 11の機能を利用できます。これは、私が求めていたものです。 この記事は2005年のものであり、おそらくそれ以来多くの変更が加えられていることに注意してください。そのアドバイスはまだ最新ですか?知っておくべき潜在的な問題はありますか?

5
GCCの致命的なエラー:stdio.h:そのようなファイルまたはディレクトリはありません
GCC 4.9(実験的)を使用してOS X10.9上のCでプログラムをコンパイルしようとしています。何らかの理由で、コンパイル時に次のエラーが発生します。 gcc: fatal error: stdio.h: No such file or directory 次に、簡単なHelloWorldプログラムを試しました。 #include &lt;stdio.h&gt; int main(int argc, const char *argv[]) { printf("Hello, world!"); return 0; } 繰り返しますがgcc -o ~/hello ~/hello.c、実行すると、同じエラーが発生しました。の実験バージョンを使用してgccいますが、インポート時にエラーが発生するリリースがあるとは考えられませんstdio。この問題の原因は何ですか?また、どのように修正できますか?
90 c  gcc  stdio 

6
OSXアプリバンドルの構築
Xcodeを使用せずにosXアプリを作成したとします。GCCでコンパイルした後、他のいくつかのライブラリにリンクされている実行可能ファイルを取得します。これらのライブラリの一部は、他の非標準システムライブラリに動的にリンクされている可能性があります 最初に必要なディレクトリ構造を作成し、次にリンクを再帰的にコピー/チェック/修正してすべての動的依存関係もアプリバンドルに含まれていることを確認することでOSXアプリバンドルを作成するツールはありますか? このようなものを書いてみることができると思いますが、このようなものはすでに存在するのだろうかと思っていました。
90 macos  gcc  otool 

4
g ++を使用したマルチスレッドコードのコンパイル
私はこれまでで最も簡単なコードを持っています: #include &lt;iostream&gt; #include &lt;thread&gt; void worker() { std::cout &lt;&lt; "another thread"; } int main() { std::thread t(worker); std::cout &lt;&lt; "main thread" &lt;&lt; std::endl; t.join(); return 0; } まだコンパイルしg++て実行することはできませんが。 詳細: $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the …
89 c++  linux  ubuntu  gcc  g++ 

4
「揮発性」の定義はこの揮発性ですか、それともGCCにいくつかの標準的なコンプライアンスの問題がありますか?
(WinAPIのSecureZeroMemoryのように)常にメモリをゼロにし、その後メモリが二度とアクセスされないとコンパイラが考えたとしても、最適化されない関数が必要です。揮発性の完璧な候補のようです。しかし、実際にこれをGCCで動作させるのにいくつか問題があります。関数の例を次に示します。 void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } 十分に単純です。ただし、GCCを呼び出すと実際に生成されるコードは、コンパイラのバージョンと実際にゼロにしようとしているバイト数によって大きく異なります。https://godbolt.org/g/cMaQm2 GCC4.4.7および4.5.3は揮発性を決して無視しません。 GCC 4.6.4および4.7.3は、配列サイズ1、2、および4の揮発性を無視します。 GCC 4.8.1から4.9.2までは、配列サイズ1および2の揮発性を無視します。 GCC 5.1から5.3までは、配列サイズ1、2、4、8の揮発性を無視します。 GCC 6.1は、どの配列サイズでもそれを無視します(一貫性のためのボーナスポイント)。 私がテストした他のコンパイラー(clang、icc、vc)は、コンパイラーのバージョンと配列サイズを問わず、期待どおりのストアを生成します。したがって、この時点で、これは(かなり古くて深刻な?)GCCコンパイラのバグなのか、それともこれが実際に準拠した動作であると不正確になり、ポータブルを作成することが本質的に不可能になる、標準でのvolatileの定義なのか疑問に思います。 SecureZeroMemory」関数? 編集:いくつかの興味深い観察。 #include &lt;cstddef&gt; #include &lt;cstdint&gt; #include &lt;cstring&gt; #include &lt;atomic&gt; void callMeMaybe(char* buf); …
89 c++  c  gcc  standards 

1
-rpathと-Lの違いは何ですか?
gccまたld、ライブラリの検索パスを指定する多くの方法を提供します。その中には-rpath、-Lフラグがあります。マンページは、これら2つのフラグの違いを明らかにしておらず、事実上、各フラグがライブラリをライブラリ検索パスに追加すると述べています。しかし、両方のフラグがまったく同じことをするのは奇妙に思えます。これら2つのオプションの違いは何ですか?

4
スタック変数はGCCによって整列されていますか__attribute __((aligned(x)))?
私は次のコードを持っています: #include &lt;stdio.h&gt; int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &amp;a[0], &amp;a[1], &amp;a[2], &amp;a[3]); } そして、私は次の出力を持っています: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac なぜの住所 a[0]の倍数ではないは0x1000ですか? 正確には __attribute__((aligned(x)))は何ですか?私はこの説明を誤解しましたか? gcc4.1.2を使用しています。

2
テンプレートクラスメンバー関数の明示的な特殊化
あるタイプ(たとえばdouble)のテンプレートメンバー関数を特殊化する必要があります。クラスX自体がテンプレートクラスではない場合は正常に機能しますが、テンプレートにすると、GCCがコンパイル時エラーを出し始めます。 #include &lt;iostream&gt; #include &lt;cmath&gt; template &lt;class C&gt; class X { public: template &lt;class T&gt; void get_as(); }; template &lt;class C&gt; void X&lt;C&gt;::get_as&lt;double&gt;() { } int main() { X&lt;int&gt; x; x.get_as(); } これがエラーメッセージです source.cpp:11:27: error: template-id 'get_as&lt;double&gt;' in declaration of primary template source.cpp:11:6: error: prototype for 'void X&lt;C&gt;::get_as()' does not …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.