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

    私的良スレ書庫

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

    元スレGCCについて part9

    gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    501 : デフォルトの名無 - 2010/07/31(土) 15:53:56 (+8,-29,-22)
    GCCで文字コードをunicodeで
    やるにはどうしたらできますか?
    502 : デフォルトの名無 - 2010/07/31(土) 16:03:57 (+57,+29,-8)
    「やる」とはどういうことか定義してくれ。
    503 : デフォルトの名無 - 2010/07/31(土) 16:08:57 (+2,-29,-10)
    unicode文字列をwstringにインプットするにはどうやりますか?
    504 : デフォルトの名無 - 2010/07/31(土) 18:00:12 (-1,-29,-6)
    >>503
    wstring s = L"あいうえお";
    これで何か不満か?
    505 : デフォルトの名無 - 2010/07/31(土) 18:52:41 (+91,+29,-4)
    いいえ、それはなにか設定が無いと出来ないから
    教えてください。
    506 : デフォルトの名無 - 2010/07/31(土) 20:24:39 (-2,+30,+0)
    507 : デフォルトの名無 - 2010/08/01(日) 01:29:14 (+3,-30,-137)
    オプションで -finput-charset と -fwide-exec-charset に文字コードを指定すればいいかもね。
    gcc をビルドするときに iconv がリンクされていない場合には使えないけど。
    あと、ライブラリ側も貧弱なことがある。
    508 : デフォルトの名無 - 2010/08/01(日) 23:30:53 (+70,+29,-4)
    >>505
    できないというなら、やってみてどうなったのか言ってみろよ。
    509 : デフォルトの名無 - 2010/08/02(月) 09:10:37 (-11,-29,+0)
    4.5.1
    510 : 478 - 2010/08/02(月) 21:14:16 (+17,-30,-266)
    自己解決
    >>478のマクロだけど__asmを使っているだけでアセンブラではなかった。
    もちろんIA-32のオペコードでもなかった。
    ただgccを利用した文字列処理をするために利用しているだけだった。

    例えば、kernel_chk.cではこういう風に使われていて

    void checker_function(void)
    {
    DEFS(TMAX_TPRI);
    MEMBER(queue,next);
    OBJECT(task_6,LOGTASK);
    }

    これらをコンパイルして.sファイルに変換すると
    #APP
    sTMAX_TPRI,($16),(0)@
    squeue::next,($4),($0)@
    dtask_6,LOGTASK@
    #NO_APP

    となるけど、もちろんこれをアセンブルすると当然エラーになる。
    TOPPERSはこれをアセンブルしないで、jsp/utils/gencheckというツールにかけて
    jsp.chkという静的APIファイル(カーネルの設定ファイル)の設定チェックファイルを生成する。
    最終的にこういうテキストになる。

    sTMAX_TPRI,16,0
    squeue::next,4,0
    dtask_6,LOGTASK

    C言語の関数の中でこのマクロを使っているのは、Cとして定義された関数名、変数名、型名などを使えるからC言語にしているだけ。
    まさか__asmにこういう使い方があるとは・・・
    511 : デフォルトの名無 - 2010/08/04(水) 15:21:05 (+36,-30,-75)
    #errorの行に到達したら即座に処理を停止するオプションとかってありますか?
    何がしたいのかというと,コンパイル時に-Dオプションでパラメタを与えていて
    パラメタを書き忘れた場合にずらずらと大量のエラーが表示されるのを防ぎたいのです.

    #ifndef ~
    #error ~~~ <-- ここに到達したら即座に停止する
    #endif
    512 : デフォルトの名無 - 2010/08/05(木) 01:25:32 (+62,+29,+0)
    >>511 いや、それだけで停止するだろ。
    513 : 501 - 2010/08/05(木) 12:46:21 (+7,-30,-66)
    4.5で
    wstring=u"あいう"とやったらエラーになりました
    uをLに変えてもエラーになりました。
    const char*=u8"あいう"とやったらエラーにならないけれど
    文字コードはSJISでした。
    ユニコードにするにはどうしたらいいですか?
    514 : デフォルトの名無 - 2010/08/05(木) 19:24:48 (-1,-29,+0)
    GCCはあきらめろ
    Visual C++マジおすすめ
    515 : デフォルトの名無 - 2010/08/07(土) 13:26:30 (+41,+13,-27)
    もしもGCCでユニコードがつかえるときのためには
    strings<T>のTを変えるだけで出来るようにプログラムを作っておけばいいんですか?
    それとも他に何か必要ですか?
    516 : デフォルトの名無 - 2010/08/07(土) 16:05:10 (+38,+20,+0)
    必要ありますん
    517 : デフォルトの名無 - 2010/08/07(土) 16:08:22 (+57,+29,-9)
    ありますんとは否定形ですかそれとも肯定形ですか?
    518 : デフォルトの名無 - 2010/08/07(土) 18:27:20 (+45,+27,-2)
    曖昧形です
    519 : デフォルトの名無 - 2010/08/08(日) 00:22:29 (+27,+9,+0)
    520 : デフォルトの名無 - 2010/08/18(水) 02:39:23 (-1,-30,-40)
    >>513
    --input-charsetと--exec-charsetは指定している?
    Cygwin 1.7で動いているよ。
    521 : デフォルトの名無 - 2010/08/31(火) 00:45:42 (+0,+0,+0)
    CentOS5.5上でXML関係のプログラムをmakeしたところ、以下のエラーが発生してしまいました。
    ぐぐったところgccのバグの可能性もありますが、プログラムやstlportの方が問題でどこを見ればよいか教えて頂けないでしょうか。

    gcc:4.1.2
    ld:2.17.50

    ccache g++ -fcommon -fPIC -DLINUX -DCENTOS -DLYNX386
    -D_MULTITHREADED -DLYNX386_V230_SOURCE -D_POSIX_SOURCE
    -DECC_MC_IF_VME -DPOSIX1B_SOURCE -DPOSIX1C_SOURCE
    -DLYNX386_V310A_SOURCE -D_XOPEN_SOURCE -D_SVID_SOURCE
    -D_REENTRANT -D_GNU_SOURCE -D_BSD_SOURCE -o
    ../../../XMLPROG -g
    -Wall -Wno-format -I. -I../.. -I- -I../../include
    -I../../include/stlport -D_STLP_NO_STATIC_TEMPLATE_DATA
    xml_prog.cpp -L../../../libfile -lmxmllib -lmxmlpath
    -lmxmllib -lxslt -lxml2 -liconv -lstlport_gcc -lz -lm
    cc1plus: note: obsolete option -I- used, please use
    -iquote instead
    `.gnu.linkonce.t._ZNK4_STL9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIcS3_NS_9allocatorIcEEEE'
    referenced in section `.rodata' of
    ../../../libfile/libstlport_gcc.a(monetary.o): defined in
    discarded section
    `.gnu.linkonce.t._ZNK4_STL9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIcS3_NS_9allocatorIcEEEE'
    of ../../../libfile/libstlport_gcc.a(monetary.o)
    `.gnu.linkonce.t._ZNK4_STL9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIwS3_NS_9allocatorIwEEEE'
    referenced in section `.rodata' of
    ../../../libfile/libstlport_gcc.a(monetary.o): defined in
    discarded section
    `.gnu.linkonce.t._ZNK4_STL9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERiRNS_12basic_stringIwS3_NS_9allocatorIwEEEE'
    of ../../../libfile/libstlport_gcc.a(monetary.o)
    522 : 521 - 2010/08/31(火) 21:34:15 (-1,-29,-22)
    自己解決しました。
    XML関係のプログラムをコンパイルするため、STLportのヘッダーファイルを変更したのですが、
    その時STLport自体を再ビルドしていなかったのが原因でした。
    523 : デフォルトの名無 - 2010/10/01(金) 20:53:32 (+19,-17,-54)
    リンカスクリプトの中で#ifdef~#endifみたいなことをやる方法はありますか?

    やりたいことはROM焼きの時とモニタ上で動かす時で各セクションのアドレスを変えたいのですが
    リンカスクリプトをコピーして書き換えるのは嫌だなぁと・・・
    524 : デフォルトの名無 - 2010/10/01(金) 21:14:47 (+5,-28,-4)
    Makefileでcppを使って生成するんじゃだめかね
    525 : デフォルトの名無 - 2010/10/01(金) 22:30:48 (+7,-29,-14)
    >>523
    条件式とDEFINED組み込み関数があるじゃん。
    526 : デフォルトの名無 - 2010/10/01(金) 23:53:46 (+57,+29,-24)
    リンカスクリプト二つ用意して、
    makeするときに、
    ROM焼きとモニタの二つが出来るようにしておくとか
    527 : デフォルトの名無 - 2010/10/02(土) 22:08:06 (+4,-29,-87)
    レスありがとうございます

    >>524
    単なるテキスト整形ツールとしてcppを使うわけですね
    diffとpatchでとは思っていたんですがそれは思いつきませんでした

    >>525
    DEFINEDを見落としていました
    まだ成功してませんがこれでいけそうな・・・感じ

    >> 526
    2つ用意するのが面倒という話でして
    528 : デフォルトの名無 - 2010/10/02(土) 22:24:03 (+57,+29,-16)
    メモリの割り当てが違うぐらいだと思うんだけどな
    529 : デフォルトの名無 - 2010/10/03(日) 12:55:25 (+9,-30,-152)
    GCC-4.6-20101002 のビルド途中、s-tm-texi (tm.texi?) の所でエラーが発生して終了する(ノД`)シクシク

    以下の所とエラーの表示内容は同じで
    http://mingw-w64.pastebin.com/N1ancXbR

    Verify that you have permission to grant a GFDL license for all new text in tm.texi, then copy it to (中略) doc/tm.texi.
    って最後に表示される

    (`Д´)ノウワァァァン
    530 : デフォルトの名無 - 2010/10/05(火) 14:55:59 (+36,-30,-287)
    組み込みソフトの開発にgccを使用しており、最近gcc3.4からgcc4.4.3に乗り換えたのですが、
    -Osの指定でいくつかの関数がインライン展開されてしまい、コードサイズがgcc3.4の時より
    明らかに大きくなってしまいます。
    で、gccのソースを見てみると以下のようなコードが・・・
    プロセッサに関係なく、ほとんどの場合にインライン展開はコードサイズは大きくなると
    思うのですが、なぜかこうなっています。
    ==================== gcc/opts.c ==========================
    void
    decode_options (unsigned int argc, const char **argv)
    {
      :略
     if (optimize_size)
      {
       /* Inlining of functions reducing size is a good idea regardless of them
       being declared inline. */
       flag_inline_functions = 1;
      :略
    ==========================================================
    -fno-inline-functionsで問題は回避できるのですが、なぜ-Osで-finline-functionsを
    許可しているのか腑に落ちません。

    なぜこうなっているのかご存知の方、いらっしゃいませんでしょうか?
    531 : 0 - 2010/10/05(火) 15:01:14 (+9,-30,-81)
    補足です。

    インライン展開されている関数は(staticのついてない)globalな関数なので、インライン
    展開されたコードだけでなく、独立したコードも生成されています。

    また、クロスコンパイラだけでなくネイティブ(i686-pc-cygwin-gcc)でも同様の現象を
    確認しています。
    532 : デフォルトの名無 - 2010/10/05(火) 15:18:59 (+44,-30,-145)
    >>531
    実際のところは判りませんが、非常に小さな関数の場合はインライン展開した方がサイズが小さくなります。
    例えば、x86で次のようなソースを-Osでコンパイルするとその下のリストのようになります。
    --
    static int func(int d) {return d * d;}
    int ff(int d) {return func(d);}
    --
    _ff:
    pushl %ebp
    movl %esp, %ebp
    movl 8(%ebp), %eax
    popl %ebp
    imull %eax, %eax
    ret
    --
    因みに、staticを外したらこうなりました。
    --
    _func:
    pushl %ebp
    movl %esp, %ebp
    movl 8(%ebp), %eax
    popl %ebp
    imull %eax, %eax
    ret
    --
    _ff:
    pushl %ebp
    movl %esp, %ebp
    popl %ebp
    jmp _func
    --
    staticじゃない関数もインライン展開してしまうのは、確かにちょっと腑に落ちませんね。
    533 : 0 - 2010/10/05(火) 16:18:19 (+4,-30,-48)
    >>532
    早速のレス、ありがとうございます。

    -param max-inline-insns-auto (デフォルト値=90)を超えなければ、staticの無いそこそこ大きな関数でもインライン展開されるようです。
    下記は、その例です。
    http://219.94.194.39/up2/src/fu25205.zip
    534 : デフォルトの名無 - 2010/10/05(火) 17:33:28 (+100,+29,-87)
    まぁあれだ、-Osはそこまで厳密に実装(カスタマイズ?)されていないに違いない。
    必要に応じて制限すればよかろ。

    それにしても、>532の最後のjmpは秀逸だな。
    535 : デフォルトの名無 - 2010/10/05(火) 17:45:57 (+36,+18,-2)
    そう?
    536 : 0 - 2010/10/05(火) 17:57:06 (+76,+29,-88)
    >>534 レス、ありがとうございます。

    >まぁあれだ、-Osはそこまで厳密に実装(カスタマイズ?)されていないに違いない。
    そうなんですかねえ。
    コメントに"good idea"とまで書かれているから単純なバグじゃないと思うんですけど・・・
    -Osなんて組み込み以外では使わないだろうから、だれも気に留めてないのかなあ?
    537 : デフォルトの名無 - 2010/10/05(火) 19:19:27 (+18,-16,-22)
    changelogとかでソースの改変履歴を探ってみたら、
    誰がいつ改変したかはわかるでしょ。その情報を元にgccのmlのlogを漁ってみたら、何かわかるかもね
    538 : 0 - 2010/10/05(火) 22:55:52 (+5,-30,-167)
    >>537 ヒント、ありがとうございます。

    ChangeLogでは見つけることができませんでしたが、コメントの
    /* Inlining of functions reducing size is a good idea regardless of them
    で検索して下記を見つけました。
    http://gcc.gnu.org/ml/gcc/2005-07/msg00547/optimize_size

    元々、max-inline-insns-autoでサイズが大きくならないようにしていたものを
    +  if (optimize_size
    +    && newsize > to->global.insns)
    と、サイズを厳密に比較するようにこのパッチで変更したようです。
    ところが、gcc4.4.3のソースにはこれに該当する部分が見つかりません。
    どうも、インライン関係をipa_inline.cに分離したときのドサクサで、この
    部分のコードが失われてしまっているようです。
    539 : デフォルトの名無 - 2010/10/06(水) 09:58:00 (-1,-29,-19)
    気が向いたら、bugzillaかpatch-mlに報告しとけばいいかも
    540 : デフォルトの名無 - 2010/10/15(金) 01:50:36 (+10,-29,-22)
    なぜgccってcluster openmp未サポートなんですか?
    バカなの?技術力ないからなの?
    541 : デフォルトの名無 - 2010/10/15(金) 01:51:59 (+0,-29,-4)
    openmpが嫌いとか?
    542 : デフォルトの名無 - 2010/10/15(金) 07:55:15 (+56,+28,-10)
    コンパイラの領分じゃないと考えてるんじゃないの?
    543 : デフォルトの名無 - 2010/10/15(金) 08:19:41 (+20,-4,+1)
    >>540
    gmp
    544 : デフォルトの名無 - 2010/10/15(金) 10:52:16 (+2,-29,-38)
    >>541
    OpenMP自体は実装してるでしょw

    Clusterの方はIntelの(R)だし、
    Intelのコンパイラで使えるから、
    やる気のある人が出にくいんじゃないの?
    一応TODOに入ってるみたいだけど。
    545 : デフォルトの名無 - 2010/10/15(金) 11:57:38 (-2,-25,+0)
    あ、gompのことか
    546 : デフォルトの名無 - 2010/10/15(金) 23:30:48 (-4,-22,+0)
    てst
    547 : デフォルトの名無 - 2010/10/16(土) 01:21:00 (+4,-30,+0)
    >>529
    (´・ω・)やっとこ原因がわかったかも・・・orz・・・イマゴロカヨ
    問題の部分は、下記の tmp-tm.texi から tm.texi を作成して、後にソース元にある tm.texi と cmp する所でした
    改行コードが違う?為に error になっていたらしいです(゚∀゚)
    修正して make ・・・今度は lto-plugin の所で sys/wait.h 無い言われて error ・・・アッヒャッヒャ!ヽ(゚∀゚)ノアッヒャッヒャ!

    関係無い?けど target.def のディレクトリ先が間違ってるよね?

    Makefile.in
    ----------
    s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in
    $(RUN_GEN) build/genhooks$(build_exeext) \
    $(srcdir)/doc/tm.texi.in > tmp-tm.texi
    $(SHELL) $(srcdir)/../move-if-change tmp-tm.texi tm.texi
    @if cmp -s $(srcdir)/doc/tm.texi tm.texi; then \
    $(STAMP) $@; \
    elif test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/tm.texi.in \
    && test $(srcdir)/doc/tm.texi -nt $(srcdir)/doc/target.def; then \
    echo >&2 ; \
    echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \
    false; \
    else \
    echo >&2 ; \
    echo Verify that you have permission to grant a GFDL license for all >&2 ; \
    echo new text in tm.texi, then copy it to $(srcdir)/doc/tm.texi. >&2 ; \
    false; \
    fi
    ----------
    548 : デフォルトの名無 - 2010/10/16(土) 03:30:06 (-3,-29,-20)
    (´・ω・) patch が出てるようだけど、マージされることを期待して取りあえず次の定期リリースまで放置~
    549 : デフォルトの名無 - 2010/10/19(火) 05:09:23 (+3,-30,-40)
    マージされなかった・・・(´;ω;`)
    とりあえず disable-lto & CFLAGS へのオプション無し(-O2 とかやると error になった)で一応ビルドは出来た(gcc-4.6-20101016 rev.165566)
    550 : デフォルトの名無 - 2010/10/20(水) 06:39:46 (+9,-30,-41)
    lto-pluginで失敗するのを回避する方法としては
    sys/wait.hをコメントアウトして
    WIFEXITED(status)
    WEXITSTATUS(status)
    をmingw用のを作れば、コンパイルは通りそうだけど
    (´・ω・)にはわかんないかな?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / gcc スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : - std:map + 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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