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

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

7
「共有オブジェクトの作成時に `.rodata.str1.8 'に対する再配置R_X86_64_32は使用できません」でコンパイルが失敗する
このソースコードをVPSのメイクファイルからコンパイルしようとしていますが、機能しません。VPSは64セントのOSです これが完全なエラーです # make gcc -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/amx/*.c g++ -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/*.cpp g++ -c -O3 -w -DLINUX -I../SDK/amx/ *.cpp g++ -O2 -fshort-wchar -shared -o "TCP_V1.so" *.o /usr/bin/ld: TCP-LINUX_V1.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC …

15
Cに推奨されるgcc警告オプション[クローズ]
クローズ。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前に閉鎖されました。 この質問を改善する -Wall以外に、他にどのような警告が役立つと思われますか? http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
83 c  gcc  compiler-errors 

1
--start-groupおよび--end-groupコマンドラインオプションとは何ですか?
これらのコマンドラインオプションの目的は何ですか?次のコマンドラインの意味を解読するのを手伝ってください: -Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib どうやらそれはリンクと関係があるようですが、GNUマニュアルは正確にグループ化が意味することを静かにしています。
83 gcc  linker  ld 

5
スタンフォードのチュートリアルとGCCの間の競合
この映画(約38分)によると、同じローカル変数を持つ2つの関数がある場合、それらは同じスペースを使用します。したがって、次のプログラムは、を出力する必要があります5。gcc結果とともにコンパイルします-1218960859。どうして? プログラム: #include <stdio.h> void A() { int a; printf("%i",a); } void B() { int a; a = 5; } int main() { B(); A(); return 0; } 要求に応じて、逆アセンブラからの出力は次のとおりです。 0804840c <A>: 804840c: 55 push ebp 804840d: 89 e5 mov ebp,esp 804840f: 83 ec 28 sub esp,0x28 8048412: 8b 45 f4 …

4
インラインアセンブリコメントを追加すると、GCCで生成されたコードにこのような根本的な変更が生じるのはなぜですか?
だから、私はこのコードを持っていました: constexpr unsigned N = 1000; void f1(char* sum, char* a, char* b) { for(int i = 0; i < N; ++i) { sum[i] = a[i] + b[i]; } } void f2(char* sum, char* a, char* b) { char* end = sum + N; while(sum != end) { *sum++ = …

15
therubyracer-Gem :: Ext :: BuildError:エラー:gemネイティブ拡張のビルドに失敗しました
次のgemバージョンをMavericksにインストールしようとしています libv8(3.16.14.3) therubyracer(0.12.1) 明らかに、therubyracerの宝石はlibv8に依存しています。 1)libv8のインストール libv8とは何ですか?私の少しの調査は、それがグーグルクロームによって使用されるある種のjavascriptライブラリであることを示しているようですか? 私はそれをインストールするのに苦労していました、しかしこの素晴らしい投稿は私のエラーとそれをバイパスする方法についてのよく説明された答えの両方を持っていました。 だから私libv8は gem install libv8 -- --with-system-v8 これはgemをインストールしますが、gemに付属しているバージョンではなく、v8ライブラリのローカルシステムインストールを使用することを理解しています。いずれにせよ、それは成功しました。 2)ルビレーサーの取り付け 次のステップで、therubyracergemのインストールに問題がありました。このgemが何をするのかよくわかりませんが、それは私がしようとしているRailsプロジェクトの依存関係であるというだけですbundle install。 次のエラーが発生します。 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. /Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb checking for main() in -lpthread... yes checking for main() in -lobjc... yes checking for v8.h... no *** extconf.rb failed *** Could not …

3
GCCパッドがNOPで機能するのはなぜですか?
私はしばらくの間Cを使用してきましたが、ごく最近、ASMを使い始めました。プログラムをコンパイルするとき: int main(void) { int a = 0; a += 1; return 0; } objdump逆アセンブリにはコードがありますが、retの後にnopsします。 ... 08048394 <main>: 8048394: 55 push %ebp 8048395: 89 e5 mov %esp,%ebp 8048397: 83 ec 10 sub $0x10,%esp 804839a: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp) 80483a1: 83 45 fc 01 addl $0x1,-0x4(%ebp) …
81 c  gcc  assembly 


10
Catalina 10.15にアップグレードした後、MacでCプログラムをコンパイルできません
前の質問があります。Mojaveへのアップグレード後にMacでCプログラムをコンパイルできません。その答えは、問題のほとんどのバリエーションをカバーしています。 現在、2019年10月7日月曜日以降、macOS Catalina 10.15にアップグレードできます。もう一度、アップグレード中に/usr/include(Mojave 10.14.6から)Catalinaにアップグレードする前にXCode 11.0がインストールされていたとしても、ディレクトリはアップデートによって吹き飛ばされました。その結果、/usr/includeディレクトリが存在することを期待してビルドされたコンパイラは、もはや機能しません。 Mojaveの問題の主な推奨手順—コマンドを使用: open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg ディレクトリ/Library/Developer/CommandLineTools/Packages/が存在しないため、ゲートの外では機能しません(したがって.pkg、開くファイルがまだありません)。 ディレクトリを作成して入力するための良い(公式の)方法はあり/usr/includeますか?
64 c  xcode  macos  gcc  macos-catalina 

2
スイッチがチェーン化されているのと同じように最適化されていないのはなぜですか?
次のsquareの実装は、連鎖ifステートメントに期待するような一連のcmp / jeステートメントを生成します。 int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return 9; } else if (num == 4){ return 16; } else if (num == …

1
gcc-10.0.1固有のSegfault
私はかなり長い間比較的安定していて、さまざまなプラットフォームとコンパイラ(windows / osx / debian / fedora gcc / clang)に対して頻繁にテストされているCコンパイル済みコードを含むRパッケージを持っています。 最近、パッケージを再度テストするために新しいプラットフォームが追加されました: Logs from checks with gcc trunk aka 10.0.1 compiled from source on Fedora 30. (For some archived packages, 10.0.0.) x86_64 Fedora 30 Linux FFLAGS="-g -O2 -mtune=native -Wall -fallow-argument-mismatch" CFLAGS="-g -O2 -Wall -pedantic -mtune=native -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection" …

1
なぜGCCは配列の初期化を集約して、最初にゼロ以外の要素を含めて全体をゼロで埋めるのですか?
なぜgccは残りの96個の整数だけではなく、配列全体をゼロで埋めるのですか?ゼロ以外の初期化子はすべて配列の先頭にあります。 void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of optimizing away } MinGW8.1とgcc9.2はどちらもこのようにasmを作成します(Godboltコンパイラエクスプローラー)。 # gcc9.2 -O3 -m32 -mno-sse bar(): push edi # save call-preserved EDI which …

2
ラムダマクロはどのようにラムダを作成しますか?
GitHubでこのコードを見つけましたが、よくわかりませんでした。 #define lambda(ret_type, _body) ({ ret_type _ _body _; }) 次に: int (*max)(int, int) = lambda(int, (int x, int y) { return x > y ? x : y; }); int max_value = max(1, 2); // max_value is 2 内部でアンダースコアは何をしていて、#defineどのようにして関数ポインタを返しますか?

1
Clangはコードをコンパイルしませんが、gccとmsvcはそれをコンパイルしました
何が問題なのか理解できません。コードまたはコンパイラ(可能性が低い)のどちらかです。次のようなコードがあります。 #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type {}; int main() { std::cout << TestA<std::set<int>>::value; } GCCとMSVCの両方でコンパイルします。GCCとMSVC 17(ローカル)および19の異なるバージョンを使用して、godboltでテストしました。リンクは次のとおりです:https ://godbolt.org/z/Enfm6L 。 しかし、Clangはそれをコンパイルせず、エラーを出します。 redefinition of `'TestA<T, std::void_t<typename …

1
GCCがstd :: vector :: sizeがこのループで変更されないと想定できないのはなぜですか?
if (i < input.size() - 1) print(0);このループで最適化されinput.size()、すべての反復で読み取られるわけではない同僚に私は主張しましたが、これはそうではありません! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>& input) { int i = 0; for (size_t i = 0; i < input.size(); i++) { print(input[i]); if (i < input.size() - 1) print(0); } } gccオプション付きのコンパイラエクスプローラによると、-O3 -fno-exceptions実際にはinput.size()各反復を読み取りlea、減算を実行するために使用しています。 movq 0(%rbp), …
14 c++  gcc  assembly 

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