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

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

6
共有ライブラリなしで、GMP、MPFR、MPC、ELFを使用してGCCを1つずつインストールする方法
現在のバージョンを使用して、GCC(GNU Compiler Collection)を少しずつインストールする方法 使用し、正しいバージョンの依存関係を使用し、パッケージマネージャー(yum、rpm、apt、dpkgなど)を使用せず、共有ライブラリを使用せずに、。 一般的な開発者は、GCCを一般的な方法でインストールするか、パッケージマネージャー(yum、rpm、apt、dpkg、port、brewなど)を使用するか、ここ(http://gcc.gnu.org/wiki/)の指示に従います。 GCCのインストール)。 私の質問は、共有ライブラリなしで、GCCを少しずつインストールする方法です。 共有ライブラリを使用したり、共有ライブラリを作成したりせずにシステム内を移動できる、完全に独立したGCCが必要です。 これはGCCが「難しい方法」と呼んでいるものであり、一般的なユーザーにはお勧めできません。 GCCは以下に依存します: GMP:GNU倍精度演算ライブラリ MPFR:GNU倍精度浮動小数点丸めライブラリ MPC:GNU倍精度Cライブラリ ELF:実行可能およびリンク可能なフォーマットライブラリ PPL:Parma Polyhedra Library(オプション、メモリ最適化用)
115 gcc  elf  gmp  mpfr  mpc 

2
C ++ 11でunordered_mapが挿入したものを破棄することは、C ++標準委員会の意図ですか?
unordered_map :: insert()が挿入した変数を破壊するという非常に奇妙なバグを追跡して、3日間の人生を失ったところです。この非常に明白でない動作は、ごく最近のコンパイラーでのみ発生します。clang3.2-3.4およびGCC 4.8が、この「機能」を示す唯一のコンパイラーであることがわかりました。 この問題を示す、私のメインコードベースからの削減されたコードを次に示します。 #include <memory> #include <unordered_map> #include <iostream> int main(void) { std::unordered_map<int, std::shared_ptr<int>> map; auto a(std::make_pair(5, std::make_shared<int>(5))); std::cout << "a.second is " << a.second.get() << std::endl; map.insert(a); // Note we are NOT doing insert(std::move(a)) std::cout << "a.second is now " << a.second.get() << std::endl; return 0; } …
114 c++  gcc  c++11  clang  standards 

17
コンパイルの問題:crt1.oが見つかりません
開発に使用している仮想Debianシステムがあります。 今日はllvm / clangを試してみたかった。 clangをインストールした後、古いgプロジェクトを(gccで)コンパイルできません。これはエラーです: ... /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory collect2: ld returned 1 exit status ... clangをアンインストールしましたが、それでも機能しませんでした。 誰も私がこれを修正する方法を知っていますか?
114 gcc  clang  ld 

4
coutは同期/スレッドセーフですか?
一般に、ストリームが同期されていないと想定しています。適切なロックを行うかどうかはユーザー次第です。しかし、cout標準ライブラリで特別な扱いを受けるようなことはありますか? つまり、複数のスレッドが書き込みを行っている場合cout、coutオブジェクトを破壊できますか?同期しても、ランダムにインターリーブされた出力が得られることは理解していますが、インターリーブは保証されています。つまりcout、複数のスレッドから使用しても安全ですか? このベンダーに依存していますか?gccは何をしますか? 重要:ある種の証明が必要なので、「はい」と答えた場合は、回答の参照を提供してください。 私の懸念は、基礎となるシステムコールについても関係ありませんが、それらは問題ありませんが、ストリームによってバッファ層が追加されます。
112 c++  gcc  c++11 

5
LinuxでPATH_MAXはどこに定義されていますか?
#include文字列のサイズを変更するためにPATH_MAXをintとして使用するには、どのヘッダーファイルを呼び出す必要がありますか? 宣言できるようにしたい: char *current_path[PATH_MAX]; しかし、そうすると、私のコンパイラ(LinuxのClang / LLVM)で次のエラーが発生します。 recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX' char *current_path[PATH_MAX]; ^ 私はグーグル検索を試みましたが、まだ運がありません。 #include <limits.h> 問題/エラーを修正しません。 PATH_MAXの値がintであることも修正しますか?
112 c  linux  gcc  include  clang 


3
コメントのみが変更されたプログラムの2つのバイナリがgccで正確に一致しないのはなぜですか?
2つのCプログラムを作成しました プログラム1 int main() { } プログラム2 int main() { //Some Harmless comments } 私の知る限り、コンパイルするとき、コンパイラ(gcc)はコメントと冗長な空白を無視する必要があるため、出力は類似している必要があります。 しかし、出力バイナリのmd5sumsを確認したところ、一致していません。また、最適化-O3を使用してコンパイルしようとしました-Ofastが、それでも一致しませんでした。 ここで何が起きてるの? 編集:正確なコマンドとそこにあるmd5sumsがあります(t1.cはプログラム1であり、t2.cはプログラム2です) gcc ./t1.c -o aaa gcc ./t2.c -o bbb 98c1a86e593fd0181383662e68bac22f aaa c10293cbe6031b13dc6244d01b4d2793 bbb gcc ./t2.c -Ofast -o bbb gcc ./t1.c -Ofast -o aaa 2f65a6d5bc9bf1351bdd6919a766fa10 aaa c0bee139c47183ce62e10c3dbc13c614 bbb gcc ./t1.c -O3 -o aaa gcc …

11
GCCとldで未使用のC / C ++シンボルを削除する方法は?
実行可能ファイルのサイズを大幅に最適化する必要があります(ARM開発)と、現在のビルドスキーム(gcc+ ld)で未使用のシンボルが削除されないことに気付きました。 arm-strip --strip-unneeded結果の実行可能ファイル/ライブラリのの使用は、実行可能ファイルの出力サイズを変更しません(私には理由がわかりません、たぶんそれができないのかもしれません)。 使用されていないシンボルが結果のファイルから削除されるように、ビルドパイプラインを変更する方法(存在する場合)は何ですか? 私もこれについては考えていませんが、現在の組み込み環境は非常に「強力」ではなく500K、2M結果を保存しても、ロードパフォーマンスが非常に向上します。 更新: 残念ながら、gcc私が使用する現在のバージョンには-dead-stripオプションがなく、-ffunction-sections... + --gc-sectionsfor を使用してもld、結果の出力に大きな違いはありません。 gcc + ld未使用のシンボルを自動的に取り除く必要があると確信していたので、これが問題になることにもショックを受けました(なぜそれらを保持する必要があるのですか?)。
110 c++  c  gcc  ld  strip 

4
特定のglibcバージョンにリンクするにはどうすればよいですか?
Ubuntu Lucid 10.04 PCで何かをコンパイルすると、glibcにリンクされます。Lucidはglibcの2.11を使用します。古いglibcがインストールされている別のPCでこのバイナリを実行すると、glibc 2.11がないとコマンドが失敗します... 私の知る限り、glibcはシンボルのバージョン管理を使用しています。gccに特定のシンボルバージョンを強制的にリンクさせることはできますか? 具体的には、ARM用のgccクロスツールチェーンをコンパイルしてみます。
110 linux  gcc  linker  glibc  libc 




11
2 GBを超えるコードでのGCCコンパイルエラー
私は合計で約2.8 GBのオブジェクトコードの膨大な数の関数を持っています(残念ながら、回避策はありません。科学計算...) それらをリンクしようとすると、(予期される)relocation truncated to fit: R_X86_64_32Sエラーが発生し-mcmodel=mediumます。コンパイラフラグを指定することで回避したいと考えました。私が制御していることに加えてリンクされているすべてのライブラリは、-fpicフラグを使用してコンパイルされています。 それでもエラーは解決せず、リンク先のライブラリの一部がPICでコンパイルされていないと思います。 ここにエラーがあります: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x19): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_init' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function …
108 c++  c  gcc  compiler-errors 

8
一部のライブラリのみの静的リンク
GCCとリンクするときに、特定のライブラリのみをバイナリに静的にリンクするにはどうすればよいですか? gcc ... -static ...リンクされたすべてのライブラリを静的にリンクしようとしますが、一部の静的バージョン(libX11など)がありません。

3
gccがCのいくつかのステートメントを最適化しないようにする方法は?
ページをダーティにする(ページテーブルエントリのダーティビットをオンにする)ために、次のようにページの最初のバイトに触れます。 pageptr[0] = pageptr[0]; しかし実際には、gccはデッドストアの削除によってステートメントを無視します。gccによる最適化を防ぐために、ステートメントを次のように書き直します。 volatile int tmp; tmp = pageptr[0]; pageptr[0] = tmp; トリックはうまくいくようですが、やや醜いです。同じ効果を持つディレクティブまたは構文はありますか?また、-O0フラグを使用したくないので、パフォーマンスが大幅に低下します。
107 c  gcc 

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