タグ

gccに関するkamipoのブックマーク (39)

  • Shared Object 入門

    最近の gcc だとシンボル解決がうまくいかないといかないことがあったので、ちょっと調べました。 次のような 3つのソースファイルがあったとして、ダイナミックリンクで作ってみましょう。 `main.c` int foo(void); int main(void) { return foo() + 1; } `foo.c` int bar(void); int foo(void) { return bar() + 1; } `bar.c` int bar(void) { return 0; } shared object を作るのに必要なのは、コンパイル時に `-fPIC` オプションをつけることと、リンク時に `-shared` オプションをつけることの 2点です。 $ gcc -fPIC -c -o bar.o bar.c $ gcc -shared -o libbar.so bar.o

    kamipo
    kamipo 2013/10/28
  • 無料サービスを使え! – 役立つ無料サービスのレビュー、まとめ、比較記事を紹介

    コンテンツへスキップ 無料「Excel」 テンプレート 比較/まとめ フリーアイコンWebサービスの比較/まとめ 無料オンラインスキャン 比較/まとめ 無料でビジネスチャット、Web会議、スケジュール管理ができるグループウェア おすすめ無料レンタルサーバーの比較 無料ストレージサービス 比較/まとめ 就職・転職には必須となる履歴書・職務経歴書 これから就職活動をスタートContinue reading フリーアイコンって何? インターネットが世界的に普及し始めて20年程度Continue reading 急にパソコンの調子が悪くなったことありませんか? この記事を読んでいるContinue reading Chat&Messenger ってどんなサービス? ビジネスチContinue reading レンタルサーバーを導入したい 企業・個人問わず、今レンタルサーバーを導Continue r

    kamipo
    kamipo 2013/09/21
  • gcc の link time optimization

    gcc-4.5 から link time optimization (lto) と呼ばれる最適化が可能になった。 従来の分割コンパイルでは、コンパイル単位(ファイル)での最適化しかできなかった。例えば、別ファイルの関数をインライン展開することはできないし、引数に渡されたポインタの escape analysis も諦めざるを得なかった。 lto はコンパイルする時に、中間表現(GIMPLEのバイトコード表現)をオブジェクトファイルに残しておき、リンクするときに、すべての中間表現を使って最適化しなおす。要は、ソースコードを全部とっておいて、最後に全部をコンパイルしなおすのと、同じようなものだ。 最大の欠点は、最後にコンパイルしなおすところだ。 このコンパイルは一回のコンパイルであり、単一プロセスで実装されているのでマルチCPUを生かせない。(いっぽう、分割コンパイルなら依存関係が緩いので並列

    gcc の link time optimization
    kamipo
    kamipo 2013/04/25
  • 猫科研究所 - gcc option

    MinGW上で頻繁にgccを利用しているくせにすぐに忘れるのでメモ。-D,-I,-i,-L,-l等の一般的で分かり切ってるものは書かない。随時追加。 なお、正確にはGCCのオンラインマニュアルが存在するのでそちらを参照すべき。オプションの一覧(リンク先は4.5.xのもの)もある。だが、あまりに膨大すぎるのでこの記事では「よく使用するが意味を忘れがちなオプション」に関してのメモとする。 -f(no-)strict-aliasing 厳密な別名規約(aliasing rule)に則っているとみなすか、則っていないとみなすか。intの変数に対してshort*でアクセスするような行儀の悪いコードが無いと宣言できるなら-fstrict-aliasingにする。 #include <stdio.h> int main(int argc, char* argv[]){ int x = 0; short*

    kamipo
    kamipo 2013/02/19
  • Using and Porting the GNU Compiler Collection (GCC) - GCCコマンド・オプション

    GCCを起動すると、 通常は、 前処理(preprocessing)、 コンパイル、 アセンブル、 リンクが行われます。 「全体的(overall)オプション」によって、 この一連の処理を中途の段階で停止することができます。 例えば、 `-c'オプションはリンカを起動しないよう指示するものです。 この場合、 アセンブラによって生成されるオブジェクト・ファイルが出力となります。 他のオプションは、 一連の処理の中の1つの段階に渡されるものです。 オプションの中には、 プリプロセッサを制御するものもあり、 コンパイラ自体を制御するものもあります。 また、 アセンブラやリンカを制御するオプションもありますが、 それらのほとんどは、 ここではドキュメント化されていません。 というのは、 このようなオプションを使うことが必要になることはめったにないからです。 GCCにおいて使うことのできるコマンドラ

    kamipo
    kamipo 2013/02/19
  • MacOSX LionでのRubyの扱い方、またはllvm-gccについて。 - 南極の図書館

    はじまりはgem install sqlite3-rubyが上手くいかなかったこと。 gemが悪いのかsqlite3が悪いのかと調べていったら、最終的な原因はLion(Xcode)のgccだった。 ※以降、LionのXcodeを入れることでインストールされるgccをllvm-gccと記載する。 目次 環境 迷走の記録 Xcodeの更新 gccのインストール 解決 参考サイト 環境 今回の作業開始時の環境は以下の通り。 iMac Mid 2010(プリインストールはSnowLeopard) Xcodeインストール済み Ruby1.8.7 gem1.3.7 OSをSnowLeopardからLionに更新した 迷走の記録 備忘として、簡単なまとめ。 gem install sqlite3-rubyでエラー。 sqlite3をyumかMacportsでいれろと言われるが、port install

    MacOSX LionでのRubyの扱い方、またはllvm-gccについて。 - 南極の図書館
  • Blogger

    Google のウェブログ公開ツールを使って、テキスト、写真、動画を共有できます。

  • GCC -mtune 何やってるか

    概要 gcc -mtune=hoge ってあんまよくわからず付けてるけど意味あんの? 効果 前のk10 vs coremaみたいな感じでparsecをひととおり動かした -O2 の時間を1.0とした時の処理時間の比 app |-O2 -mtune-native streamcluster | 1.016 canneal | 1.016 vips | 0.954 bodytrack | 0.966 x264 | 1.049 blackscholes | 0.986 swaptions | 0.981 ferret | 0.997 なんらかの効果がある…ように見える…? (ネタバレ: -march=avxが付いてて、それの効果が出ている) 超簡単にGCCのコード解説 gcc/*.c アーキ非依存のコード gcc/config/i386/* i386のコード gcc/config/i386/i3

    kamipo
    kamipo 2012/04/13
  • PerlエンジニアのためのObjective-C Blocks入門 - unknownplace.org

    OS X 10.6 以降の xcode では Objective-C に Blocks というシンタックスが追加されている。 Blocks Programming Topics: Introduction Perl でいうところの無名関数(コードブロック)を作ることができる機能で、Perlでいうところの my $f = sub { ... }; $f->(); は void (^f)() = ^{ ... }; f(); のように書ける。書式がきもいのはObjective-Cの定めなのであきらめましょう。 より詳しい書式については上記ドキュメントを見ると良い。 しかしデフォルトではPerlのコードブロックとはレキシカル変数の扱いが異なる。 my $i = 0; my $f = sub { return $i + 1 }; $i++; $f->(); # 2 を返す perlではこのようにレ

    kamipo
    kamipo 2012/03/11
  • niw.at — GCCが... 無い...!

    Xcode 4.2のあるバージョンを以降を入れるとgccが消えるようです。つまり、 $ ls /usr/bin/gcc /usr/bin/gcc -> llvm-gcc-4.2 「えっ」 「聞いてない…」 となるわけです。 でも、Appleは散々gccはオワコンと言っているので復活する兆しは無いでしょう。このへんはgccのライセンス周りが大きく影響してそうです。 で、困るのは今後標準になるclangは色々エラー出まくるとか、llvm-gccが微妙にgccと違う挙動をするとか、あぁ、もう今そういう問題に付き合ってる暇はないんだよおおぉぉ!ってなるわけです。 でも、無い物はない。困った。 そこで、一番手抜きな方法でgcc-4.2だけをいっこ前のXcodeから入れましょう。 Xcode 4.1を用意します。App StoreのXcodeは4.2になってしまっていますがここからダウンロードできます

  • __builtin_expectの効力 - 初学者の箸置

    RLogをいじってて知った__builtin_expectを試してみた。__builtin_expectはある式がほとんどの場合に決まった定数になる、と言う場合に分岐予測のヒントなどを与えて高速化を計るためのgccディレクティブだそうな。 RLogはdormant(休眠)状態のログファシリティに最適化してあって、プロダクションコードにログコードを残しっぱなしでもさほどデグレしないのが売りなんだけど、そのカラクリがこれ。 で、RLog自身についてはあとで書く。 どうかく? 具体的には __builtin_expect(A,B)と書いた場合 Aが定数 Bである事を期待する、というヒント情報になる。 例えば、比較演算子がほとんどの場合成り立たない、と言う場合 __builtin_expect(, 0) となる。 #include <stdio.h> #ifdef EXPECT #define E

    __builtin_expectの効力 - 初学者の箸置
    kamipo
    kamipo 2012/02/05
  • GCCのコンパイルオプションで関数トレーサ - torutkのブログ

    このの「#77 関数へのenter/exitをフックする」で、GCCのコンパイルオプション-finstrument-functionsを使い、関数が呼び出された時、関数から復帰するときにフックを入れる方法が紹介されています。フック関数のシグニチャは以下です。 void __cyg_profile_func_enter(void* func_addr, void* call_site); void __cyg_profile_func_exit(void* func_addr, void* call_site); このフック処理に渡されるアドレスから関数名を出して、関数の実行を追う簡易な関数トレーサを作成します。アドレスから関数に変換する方法で一番簡単そうなのは、同じの「#62 dlopenで実行時に動的リンクする」でglibcのGNU拡張として紹介されているdladdr関数です。 #i

  • Radium Software Development - Eat Your Own Dogfood

    Giới thiệu website Bóng đá Socolive TV - Trang web xem bóng đá trực tiếp 24/7 HD không có quảng cáo, chất lượng tốt nhất trên thị trường. Với hàng ngàn giải đấu bóng đá trong nước và quốc tế, Socolive TV cung cấp dịch vụ xem trực tiếp 24/7 với chất lượng HD siêu mượt. Với hàng trăm bình luận viên và phòng chat sôi động, người hâm mộ bóng đá sẽ có những trải nghiệm thú vị nhất. Giới thiệu những nét

    kamipo
    kamipo 2011/09/02
  • 卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...

    今回のお題は char 幅じゃなくて word 幅の memset 、つまりプロトタイプだと void* memset64(void* destination, uint64_t image, int num_words); をどれだけ高速に行うかという話。なぜ高速化するかというと、塗りつぶす領域がけっこうでかいから。 候補 1: REP STOSvoid* memset64(void* d, uint64_t i, int n) { asm("cld; rep stosq;" :: "D"(d), "a"(i), "c"(n) : "memory"); return d; } 最近の CPU はクソ賢い。そのため、下手に手で loop unrolling するよりも、逆に CPU に「ここはループなんだぞおおお~」というのを明示的に指示してあげたほうが CPU 側が勝手かつ不気味に最適な

    卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...
  • GCCの各オプティマイズレベルで有効になる最適化を調べる - Shohei Yoshida's Diary

    GCC 4.4ぐらいから見たいなのですが、-Qオプションを使うと、 最適化等でどのオプションが有効になるかがわかるみたいです。 具体的には以下のようなコマンドです。 % gcc -O2 -Q --help=optimize # 個々のオプションについて 'enabled' or 'disabled'が確認できるそれで各レベルでの違いを見てみた。 まとめるのが面倒なので以下のようなスクリプトを走らせる #!/usr/bin/env perl use strict; use warnings; my @levels = qw(-O0 -O1 -O2 -O3 -Os); my @base = qw(gcc -- -Q --help=optimize); my %optimize; for my $level (@levels) { my @cmd = @base; $cmd[1] = $leve

    GCCの各オプティマイズレベルで有効になる最適化を調べる - Shohei Yoshida's Diary
    kamipo
    kamipo 2011/06/20
  • 1GBレンタルサーバー・プロバイダー Amusement BiG-NET | www4.big.or.jp/~kanai/MT/archives/000507.html

    こちらは独自ドメインからレンタルサーバー、フレッツ接続専用会員までトータルサポートのプロバイダー、BiG-NETです。 いつも弊社ユーザーのページにアクセスをして頂きましてありがとうございます。 http://www4.big.or.jp/~kanai/MT/archives/000507.html 404 Not Found (ファイルが見つかりません) 申し訳ございませんが、お客様がアクセス要求されました上記ページは、現在アクセスが出来ません。 弊社では、なぜアクセスできないのかと言う第三者からのお問い合わせにはお答えすることが出来ません。 もしこのページの関係者をご存知でしたら、連絡を取ってみることをお薦め致します。 何卒ご容赦下さい。

  • main() の前に関数を呼ぶ - bkブログ

    main() の前に関数を呼ぶ C/C++ のプログラムで、main() の前に関数を暗黙的に呼びたいときがあります。ここでは GCC の拡張を使った方法と、C++ のコンストラクタを使った方法を紹介したいと思います。 GCC では main() の前に呼ばれる関数を __attribute__((constructor)) という拡張機能を使って定義できます。たとえば、次のプログラムでは main() の前に foo() が呼び出されます。 #include <stdio.h> __attribute__((constructor)) void foo() { printf("hello, before main\n"); } int main (int argc, char **argv) { printf("hello, world\n"); return 0; } 実行結果は以下の

  • gmp 4.3.0 tests fail on Mac OS X 10.5

  • Setting GCC 4.2 as the default compiler on Mac OS X Leopard

    I'm sure there must be a way to do this. As you are probably aware the latest versions of Xcode (and in fact I think all versions of Xcode) on Leopard come with GCC 4.0.1 and GCC 4.2. GCC 4.0.1 is the default system compiler while GCC 4.2 is an optional compiler you can set in the Xcode project settings. Does anyone know how to set GCC 4.2 as the default compiler for all options? Preferably comman

    Setting GCC 4.2 as the default compiler on Mac OS X Leopard
    kamipo
    kamipo 2010/07/29
  • Omicron gccの拡張機能

    C コンパイラ標準の機能ではなく,gcc 独自の拡張機能(文法)について. Extensions to the C Language Family (gcc 4.1.1) 翻訳 Extensions to the C++ Language (gcc 4.1.1) 翻訳 gccの拡張文法 GNU拡張を使う (スピード狂のための道標) アプリケーション屋さんはそれほど深刻じゃないかもしれないけど(性能もよい商用コンパイラがあるし),カーネル屋にとっては(ほぼ)必須なコンパイラ.Linux カーネルだけでなく,ITRON でも gcc に依存しちゃっているカーネルが多いみたいだね. ポータブルにするには #ifdef __GNUC__ で使いわければよい. Linux カーネルで使われている gcc の拡張機能 Linux カーネルには gcc の拡張機能が結構使われている. 以下に,その例を示

    kamipo
    kamipo 2010/02/17