のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,836人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレGCCについて part10

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    301 : デフォルトの名無 - 2013/04/08(月) 23:18:38.75 .net (+0,+0,+0)
    レスありがとう!

    んでも
    64ビットのWindowsおよびgccだけSJLJ例外の32ビットベースのmultilibの
    バージョンについては#エラーがサポートされています。
    って怒られた。。。ウチの環境はWin7x64、gccはTDM64です

    configureはこれ
    LIBS="-lintl -liconv " ../gcc-4.8-20130404/configure --prefix=/usr/gcc \
    --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \
    --with-tune=generic --enable-threads=posix --disable-multilib --enable-static \
    --enable-languages=c,c++,objc,obj-c++ --enable-libgomp --disable-sjlj-exceptions \
    --with-dwarf2 --enable-version-specific-runtime-libs --disable-win32-registry \
    --disable-werror --disable-nls --enable-lto --with-system-zlib \
    --enable-libstdcxx-debug --enable-cxx-flags='-fno-function-sections -fno-data-sections' \
    --enable-fully-dynamic-string --disable-libstdcxx-pch --disable-bootstrap \
    --with-mpc-lib=/usr/tool/lib --with-mpc-include=/usr/tool/include \
    --with-mpfr-include=/usr/tool/include --with-mpfr-lib=/usr/tool/lib \
    --with-gmp-include=/usr/tool/include --with-gmp-lib=/usr/tool/lib \
    --with-cloog-include=/usr/tool/include --with-cloog-lib=/usr/tool/lib \
    --with-isl-include=/usr/tool/include --with-isl-lib=/usr/tool/lib

    --disable-multilibを消しても、やっぱりx64云々で蹴られますた
    ってかconfigureのログ見てると、intl=ok, iconv=okって言ってるのになんで
    intlの関数が不明って言われるのかなあ。
    302 : デフォルトの名無 - 2013/04/08(月) 23:45:08.36 .net (+4,-30,-89)
    消すなら --disable-multilib ではなくて --disable-sjlj-exceptions だろjk

    あと、もし binutils を一緒にビルドしようとして、
    gcc のフォルダ内に binutils/{なんやらかんやら} へのリンクを張ってるなら、
    両者に共通のライブラリが、バージョン違って失敗するかも
    303 : デフォルトの名無 - 2013/04/09(火) 00:07:40.47 .net (+3,-30,-86)
    消したけどダメ。。
    ターゲット・ホスト・ビルドのx86_64-w64を消さないとどうしても
    「はぁ?x64?」みたいな事言われるので消して、それでもintlで文句言われて
    config.hに<linintl.h>書き加えてビルド進めるとlibgccで

    Assembler messages:
    Error: invalid instruction suffix for `push'

    アセンブラ関連のエラーだと思うんだけど、ターゲットをx86_64-w64にすると怒
    られ、libintlで怒られ…gccサイトのQ&A見ても「我々は悪くない、文句言われる
    テメーが悪い」みたいな事書いてあるし。。。。

    もうネルソン!
    304 : デフォルトの名無 - 2013/04/09(火) 22:43:32.74 .net (+0,-30,-74)
    やっとでけたあああ
    七誌さんそして>>300ありがとう!
    一応手順

    gcc用のディレクトリを作成、binutilsをビルド→インストール
    gccをコンパイラのみビルドしてinstall-gcc
    ここでmsys上のmingwを今作ったgccに切り替え
    mingw-w64ランタイムをヘッダのみビルド→インストール
    ランタイムをビルド→インストール
    gccの残りをビルド→インストール

    今まで通常使ってるmingwだけでビルドしようとしてたのが間違ってた?っぽい
    305 : デフォルトの名無 - 2013/04/09(火) 22:49:25.32 .net (+3,-30,+0)
    なんだかよく分からなかったけど強引に潰したエラー、3件

    1.↓って言われる
    i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
    i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
    i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
    i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
    i386/cygming.h:358:2: error: #error For 64-bit windows and 32-bit based multilib version of gcc just SJLJ exceptions are supported.
    i386/mingw32.h:101:2: error: #error DW2 unwind is not available for 64-bit.
    コメントアウト

    2.
    intl_printが不明
    config.hに<libintl.h>を書き足す

    3.
    libstdc++-v3/include/bits/basic_string.hでエラー

    call googleで外人さんのパッチをクローン
    +++ ./libstdc++-v3/config/os/mingw32-w64/os_defines.h
    +#include <_mingw_mac.h>
    +#if !defined (__MINGW64_VERSION_MAJOR) || (__MINGW64_VERSION_MAJOR < 3)
     #define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1
    +#endif

    3は、なんだか公式のmingw32使えみたいな事言ってた気がするけど1.2が分からんち
    特に2番、なんでヘッダを要求されるのか。公式になんか書いても怖い人しかいないよう
    な雰囲気なので聞けない。。。

    グダグダ書いたけど結局は>>302のbinutils云々がヒントになってビルド出来た、ありがとね
    306 : デフォルトの名無 - 2013/04/09(火) 23:22:10.38 .net (-1,-29,-4)
    追記:libintlがぶっこわれてた
    今までどうやってビルド通ってたんだろ・・・・・・・・・
    307 : デフォルトの名無 - 2013/04/10(水) 12:19:18.40 .net (+32,+16,+1)
    馬鹿には無理
    308 : デフォルトの名無 - 2013/04/13(土) 12:00:07.40 .net (+57,+29,-6)
    ネタじゃないので聞いてください。
    一番最初のgccはどのようにコンパイルされたのですか?
    309 : デフォルトの名無 - 2013/04/13(土) 13:04:09.04 .net (+28,+0,-38)
    別のコンパイラを使う。UNIXのccとか。

    歴史の話じゃなくて実用的な意味でどうするかといえば、
    オフィシャルでバイナリのgccが配布されているのでそれを使う。
    310 : デフォルトの名無 - 2013/04/13(土) 13:12:18.33 .net (+48,+20,-14)
    最初のGCCはCで書かれていたわけでは無いらしい
    311 : デフォルトの名無 - 2013/04/13(土) 13:13:20.52 .net (+59,+29,-8)
    ネタじゃないので聞いてください。
    一番最初のccはどのようにコンパイルされたのですか?
    312 : デフォルトの名無 - 2013/04/13(土) 13:25:22.63 .net (+52,+29,-2)
    最初のコンパイラは機械語で書いた
    313 : デフォルトの名無 - 2013/04/13(土) 14:56:44.41 .net (-1,-29,-1)
    最初のコンパイラはA-0 Systemらしい。
    314 : デフォルトの名無 - 2013/04/13(土) 18:04:08.51 .net (+57,+29,-16)
    gccをどうやってコンパイルするかを勉強してると
    そのあたりまで平然と遡らされるよな
    315 : デフォルトの名無 - 2013/04/13(土) 18:20:46.26 .net (-1,-29,-6)
    Z80アセンブラをN88-BASICで実装しようとしたのは良い思い出…
    316 : デフォルトの名無 - 2013/04/13(土) 23:18:45.40 .net (+14,-29,-17)
    >>311
    > 一番最初のccはどのようにコンパイルされたのですか?
    当時一般的に使われていた, Unix 上の PCC 互換コンパイラでコンパイルされたんだが,
    なんか問題あるの?
    317 : デフォルトの名無 - 2013/04/14(日) 00:00:12.33 .net (+59,+29,-4)
    >>316
    どこまで遡れるか大会だろ空気嫁よ
    318 : デフォルトの名無 - 2013/04/14(日) 05:34:33.84 .net (+65,+29,-13)
    ネタじゃないので聞いてください。
    一番最初のアセンブラはどのようにアセンブルされたのですか?
    319 : デフォルトの名無 - 2013/04/14(日) 05:50:10.27 .net (+57,+29,-15)
    ネタじゃないならアセンブラスレで訊きましょう
    320 : デフォルトの名無 - 2013/04/14(日) 10:08:15.61 .net (+51,+28,-19)
    2chは優秀な技術者が議論する場所
    321 : デフォルトの名無 - 2013/04/14(日) 10:54:15.95 .net (+54,+23,+2)
    >>318
    ハンドアセンブル
    322 : デフォルトの名無 - 2013/04/14(日) 11:37:22.44 .net (+0,-30,-114)
    multilib有効にしてGCCビルドしたら、ライブラリビルドでldちゃんが
    32ライブラリに64libを合体させてしまいまする
    export -m32 -L/lib32 とかにしても言う事を聞いてくれませぬ
    ググっても、バカには無理みたいな風潮
    TDMとか、どうやってmultilibなGCCビルドしてるんだろ?
    323 : デフォルトの名無 - 2013/05/08(水) 21:32:17.28 .net (-1,-29,-25)
    gccの2.95.3なんですが、
    gccがコンパイルされたときの./configureに渡された設定など
    調べる方法は無いでしょうか?
    324 : デフォルトの名無 - 2013/05/09(木) 02:22:37.84 .net (+19,-6,-5)
    gcc -vは?

    どうでもいいことだが、なぜそんな化石を使うのか聞いてみたい
    325 : デフォルトの名無 - 2013/05/22(水) 15:12:42.53 .net (+12,-30,-277)
    gccで、以下のような情報を得るためのコマンドラインオプション、あるいは
    ツール・手段はありませんでしょうか?

    知りたいのは、どういう過程でライブラリがリンクされているかです。
    例えば、main.cでprintf()が使われている時、
    (1) main.o には未解決のシンボル'printf'がある
    (2) 未解決シンボル'printf'を解決するため、libc.a 内の lib_a-printf.o をリンクした
    (3) さらに lib_a-printf.o には未解決のシンボル'vfprintf'がある
    (4) 未解決シンボル'vfprintf'を解決するため、libc.a 内の lib_a-vfprintf.o をリンクした
    (5) さらに lib_a-vfprintf.o には未解決のシンボル・・・・
      :
    のような情報が得たいのです。

    目的は、組み込み用でコードサイズ小さくしたい場合に、想定外のライブラリがリンク
    されているような場合、何が起点になっているかを調べるためです。
    (例えば、標準入出力は使ってないのに標準入出力関係のライブラリがごっそりリンクさ
    れてしまう場合に、sprintf()→vfprintf()→・・・と、sprintf()を使っているのが原因
    であることを知りたい)

    -Wl,--verbose は試してみましたが、ダメでした。
    326 : デフォルトの名無 - 2013/05/22(水) 15:23:31.68 .net (-11,-29,-2)
    man(2)
    327 : デフォルトの名無 - 2013/05/22(水) 15:25:10.67 .net (-2,-20,+1)
    lint
    328 : はちみつ餃子 ◆ - 2013/05/22(水) 16:31:27.29 .net (+61,+29,-3)
    >>325
    スマートリンクを使った方がてっとりばやいんじゃね?
    329 : 0 - 2013/05/22(水) 19:12:38.41 .net (+11,-30,-118)
    >>328
    レス、ありがとうございます。

    スマートリンクもコードサイズ削減に効果が無くはありませんが、(newlibは結構細かく
    ソースが分けてあるので)効果は小さいと思われます。

    例えば、newlibの場合newlib内で使用する静的変数を(マルチスレッド対応等が容易なよ
    うに)_reent構造体にまとめてありますが、これをリンクするような関数を一つでも使用
    してしまうと_reent構造体に関連する関数が多数リンクされ、コードサイズが肥大します。
    これは(実行時に呼ばれることは無くても)未定義シンボル解決には必要であり、
    -Wl,--gc-sectionsでは防止できません。
    コードサイズの肥大の起因となるライブラリ関数が(質問に記述のように)特定でき、これ
    がごく少数なら、この関数を使用しないようにプログラムを書き換えてしまえ、という
    わけです。
    330 : デフォルトの名無 - 2013/05/22(水) 19:16:10.03 .net (+0,-29,-25)
    gccじゃなくてリンカの仕事
    例えばAppleのldなら-why_liveとかあるから、とりあえずman ld
    331 : デフォルトの名無 - 2013/05/22(水) 19:58:13.29 .net (+4,-29,-58)
    使ってる*.oをnmして未定義シンボルをリストして、
    シンボルがどの*.aで定義されてるかnmして調べて、
    *.aをar xして*.oにしてnmして、
    以下収束するまで繰り返し。

    多分機械的に出来るんじゃないか?
    Cの場合、使われる*.aは引数で与える必要があって、
    最初から全リストが分かってるわけだし。
    332 : 0 - 2013/05/22(水) 20:31:03.39 .net (+4,-30,-192)
    >>330
    誤解を招く文章ですいません、ld(binutils)を含めてgccと書いていました。
    -why_live(https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ld.1.html)
    はまさに欲しているものでしたが、使用しているld(GNU ld version2.15 arm-elf/cygwin
    のクロス環境)には実装されていないようでした。
    * ld.info(manがなかったので)
    * arm-elf-ld --help
    *http://sourceware.org/binutils/docs-2.15/ld/Options.html#Options
    で、why/live/chain/refferenceなどのキーワードで探してみましたが、同等のものは
    見つけられませんでした。

    >>331
    はい、その方法(それを行うツールの作成)は最後の手段として考えています・・・
    333 : デフォルトの名無 - 2013/05/22(水) 21:59:40.34 .net (-2,-30,-10)
    ld --help
    --cref 相互参照表を出力する

    -Wl,--cref
    334 : 0 - 2013/05/23(木) 12:04:25.97 .net (+0,-28,-1)
    >>332
    ありがとうございます。
    --crefで目的を達せそうです。
    335 : デフォルトの名無 - 2013/06/01(土) 20:00:59.98 .net (-1,-29,-17)
    cygwinで gcc 4.8.1 コンパイルしたけど、エラーが2つでてインスコできんわ・・orz
    336 : デフォルトの名無 - 2013/06/02(日) 11:49:35.35 .net (+8,-29,-20)
    gcc -S -g で出力されるアセンブルコード中の.locの情報を
    該当するCソースに置換するフィルタはどこかで公開してませんか?
    337 : デフォルトの名無 - 2013/06/02(日) 23:36:32.81 .net (+11,-30,-190)
    as --help
    -a[sub-option...] turn on listings
    Sub-options [default hls]:
    c omit false conditionals
    d omit debugging directives
    g include general info
    h include high-level source
    l include assembly
    m include macro expansions
    n omit forms processing
    s include symbols
    =FILE list to FILE (must be last sub-option)

    gcc -c -O2 hoge.c -Wa,-ahls=hoge.lst
    338 : 336 - 2013/06/03(月) 10:32:13.74 .net (+58,+28,+1)
    >>337
    ありがとう。それに-gつけたら出来ました。
    339 : デフォルトの名無 - 2013/06/13(木) 05:42:57.74 .net (-1,-29,-15)
    gcovの使い方の質問ここでしたらスレチですか?
    340 : デフォルトの名無 - 2013/06/13(木) 11:06:32.53 .net (-1,-29,-1)
    profとかcovはいいんじゃない?
    341 : デフォルトの名無 - 2013/06/14(金) 00:47:14.15 .net (+13,-29,-42)
    ではお言葉に甘えて。
    カバレッジを調べるためgcovすると自分のソース以外の
    iostream.gcovとかも大量にできてしまいます。

    これを指定のディレクトリ以外は生成しないようにできないものでしょうか?
    今のところ-pをつけてファイルを生成し必要のないフォルダのものをrmで消してます。
    342 : デフォルトの名無 - 2013/06/14(金) 01:08:14.99 .net (+0,-30,-28)
    gcov --help
    -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する
    343 : 341 - 2013/06/15(土) 01:10:38.28 .net (+2,-30,-104)
    >>342
    使い方が間違っているのか期待した結果になりませんでした。
    srcディレクトリに.h / .ccがあるので -o src と指定しましたがiostream.gcovは生成されました。
    objディレクトリに .o があるので -o obj と指定すると
      obj/test.gcno:cannot open graph file
    といったエラーが表示されます。そこでobjにtest.gcnoをmvすると処理は通りますが
    相変わらずiostream.gcovは生成されます。

    ただlcovすると.gcovは消えるので気にしなければ済む問題かもしれません。
    344 : デフォルトの名無 - 2013/08/06(火) NY:AN:NY.AN .net (+48,+30,+0)
       
    345 : デフォルトの名無 - 2013/09/13(金) 23:40:52.15 .net (+10,-30,-118)
    プリプロセッサの話ってここで大丈夫?スレチだったら流して

    gccの-EオプションでCライクな言語のプリプロセスかけてるんだけど、そのマクロの記述で
    #define get_pi(data) (6'(data)<<3)って感じの記述してて、
    これの ' の部分が文字データ記述の開始として扱われてdataが置き換わらないんだけど、対策ないですかね?
    346 : デフォルトの名無 - 2013/09/14(土) 00:07:31.67 .net (+12,-30,-60)
    SystemVerilogかね?
    #define s '
    #define get_pi(data) (6 s (data)<<3)
    空白が入るけど動くよ。警告も出るけど。
    規格上問題ないか、どのGCCバージョンでも動くかは分からん。
    347 : デフォルトの名無 - 2013/09/14(土) 00:25:12.48 .net (+60,+29,-42)
    >>346
    返信ありがとう御座います!
    早速試したら出来ました。けどなぜ動くのかわからない…
    因みに使ってるのNSLという言語です。ハードウェア記述言語なのは一緒ですかね
    348 : デフォルトの名無 - 2013/09/14(土) 00:39:13.04 .net (+15,-29,-42)
    >>347
    dataが置換された後に再走査されてsが置換されるから動く。
    だから#define s ' が動けば、問題なく動く。
    349 : デフォルトの名無 - 2013/09/14(土) 00:48:05.09 .net (+61,+29,-34)
    >>348
    プリプロセッサってプロトタイプ宣言みたいに上から順に~ってわけではないのか。一緒だと思ってました
    350 : デフォルトの名無 - 2013/09/14(土) 04:44:31.37 .net (-1,-29,-25)
    gcc4.9のtrunk版、3ヶ月くらいプラグマバグでビルド出来なかったんだけどようやく修正された
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について