GCCについて part10
■ このスレッドは過去ログ倉庫に格納されています
ストラウストラップ本は、あれプログラミング初心者向けの本じゃないから注意な 中級者が現実的なプログラミングの方法を学ぶ為の本であって 初心者って何の? CやJavaは知ってるが、これからC++をやろうって言う人にはうってつけのような・・・ 俺にはプログラミングの初心者って書いてあるように見えるが…? >本書はその原則を実際に展開しながら「プログラミングとはなにか」「どうやってプログラミングを学習するか」を >平易に解説してゆく。何度も挫折を繰り返した学習者や、原点に立ち戻り「プログラミング」を深めたい実務者など、 >すべての開発者必読の1冊である。 と、あるよ? >>2 プログラミングの初心者は現実的なプログラミングを学んじゃいけないの? まぁ あの本はストラウストラプ先生(長い)の ありがた〜い言葉を入門者のように素直に聞くというのが いいかと。 神の声のような感じでうっとりですよw でも int char double string if switch while for vector ってな 感じでポンポン出て来て、リズムがいいっすね。 ほんとにC++はツールとして選んだって感じです。 一冊くらいはびよーんすぽっすぽっの本も読んでみるか。 前スレ>>999 いや時代遅れで役に立たない本だ、とか言いたかったわけじゃなくて 単純に>>976 が勘違いしてそうだったので。 禿があれ書いた時は、ああもうC++0xが確定寸前でやることないから、 プログラミング入門でも書く気になったのかなと思った。 もちろんそれは気のせいだった。 >>3-5 とんでもない誤解だよ ttp://d.hatena.ne.jp/eel3/20110813/1314198158 >ただ「プログラミングを始めるための最もやさしい本ではない」訳で、 >何かしらの開発経験はあるけど色々と足りない部分を痛感しているような人なら本書で独習することも可能だろうが、 >それよりも経験値が不足している人やプログラミング未経験の人が独習用に使うのは避けたほうが無難だろう ふ〜ん。(゚σ ゚)ホジホジ まえがきからの抜粋に文句つけられても・・・ >本書はプログラミングを始めるための最もやさしい本ではないし、そのようなつもりで書いていない。 >著者が目指したのは、現実のプログラミングの基礎を最も簡単に学べる本である。 >現実のソフトウェアの多くがほんの数年前まで高度であると見なされていた技術に基づいていることを考えれば、実に意欲的な目標ではないか。 >基本的には、他の人が使用するためのプログラムを書き、それを責任を持って行い、 >それなりの品質を維持したいと考えていることが前提となる。 >つまり、プロとして恥ずかしくないレベルを目指しているものと想定する。 >そこで、本書では教えたり学んだりするのがやさしいものではなく、 >現実のプログラムに取り組むために必要なものがカバーされるように話題を選んだ。 あえて入門書というカタチを取ったおかげで 言葉や想いが伝わりやすくなってる気がする。 でも その言葉は熱く優しく気高い。 まあ独学でやるにはそれなりのプログラミング経験は必要ってこったな 趣味ならrubyなりnode.jsなり、もっと良い言語があるのにな unused but set variablesって4.6以降エラー扱いがデフォになってるみたいだけど、 これって弾かないといけないくらい有害なの? いまいちデメリットがよくわかんないんで誰かヒントくれ。 無駄な変数宣言しとるで って、だけじゃあ 違うかな その程度で警告じゃなくてエラー扱いはやりすぎだからなんか深い理由があるの? と>>18 は聞いてるようだが -Wunused-parameter つけんと特に怒らんけどね、コンパイラ -O2 -Wall -Werrorあたりよくわからんまま適当につけて 怒られているとエスパーしてみる -Werror=unused-but-set-variable #: c-decl.c:1183 #, gcc-internal-format msgid "variable %qD set but not used" msgstr "変数 %qD が設定されましたが使用されていません" 質問です gcc4.6.1(MinGW)でRaw string literalで R[]で囲もうとするとコンパイルエラーになります R()で囲むとコンパイルが通るのですが、どちらが正しいのでしょうか? R"( )" で囲むのが正しいよ R"hoge( )hoge" とかで囲んでもいいけど R[ ] も R( ) もコンパイル通らない >>29 ありがとうございます 早くc++11の規格表が欲しくなりますね はい FDISはいりません 正規のPDFを購入予定です そのうちANSI版が安く出るでしょ。(ISO版は高いけど) やっとリポに4.5.3来た 4.4.5 → 4.5.3 ビルドしてきます 共有ライブラリのリンクの方法に関する 正式なドキュメントってどこにあるんでしょう? GCC online documentation http://gcc.gnu.org/onlinedocs/ ここのどのバージョンでもいいですけど リンクオプションのページを見ても -l の説明にはスタティックライブラリの ことしか載ってないですよね? 今まで普通に -l で共有ライブラリのリンクも 指定して特に問題なく実行できていたのですが 一度ちゃんと仕様を確認しておこうと思ったら どこにもないのですが… それとも単純にスタティックの場合の記述を 共有の場合にも適用してしまっていいということでしょうか? ご存知の方いましたら教えてください >>36 共有ともスタティックとも書かれていないような。 ttp://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Link-Options.html#index-Libraries-968 >>37 -l の説明の最後に ... with `lib' and `.a' and searches several directories. とあったので拡張子からしてスタティックのことだと思ったのですが そういうわけではないのでしょうか? man ldしな。gccはコンパイラやリンカをそこそこよろしいオプションで起動するドライバ。 例外投げる共有ライブラリを使う場合は-static-libgccは使わない方がいい。 本当に詳しく知りたいならbinutils側のドキュメントと現在の実装度、 使うオブジェクトファイル形式の仕様、OS側のライブラリ管理方式、 自分の使うgccのspecsファイルを見れば何したらどうなるか分かる。 man ld はCentOS5で確認済みでしたが、共有ライブラリに関することは 載っていませんでした。(むしろスタティック限定とも取れる書き方) …が、ネットでいくつか検索してみたところ、例えば http://www.sra.co.jp/wingnut/ld/ld-ja_2.html では > -larchive > --library=archive > 共有ライブラリをサポートしているシステムでは, ld は, 拡張子が .a 以外のライブラリをも検索する. > 特に, ELF システムと SunOS では, ld はあるディレクトリでライブラリを検索する時, 拡張子が .a の > ものよりも先に拡張子が .so のものを 探す. 約束により, .so という拡張子は共有ライブラリを表す. という記述があり、一応スッキリしました。 (割と重要な情報だと思いますが、マニュアルに必ずしも記述されてないようですね) binutilsをはじめとするその他ドキュメントについても確認してみます。 どうもありがとうございました。 GCCはmanpageは参考程度と思え、とどっかで読んだ記憶がある 今のbinutilsのmanなら-l namespecで同じ記述がある筈なんだけどなあ CentOSのパッケージの都合でもあるのか >>41 逆にさんざん探して無いと思ってた情報がmanに載ってる場合も >>40 > On systems which support shared libraries, ld may also search for > files other than libnamespec.a. Specifically, on ELF and SunOS > systems, ld will search a directory for a library called > libnamespec.so before searching for one called libnamespec.a. (By > convention, a ".so" extension indicates a shared library.) Note > that this behavior does not apply to :filename, which always > specifies a file called filename. manpageにこの記述がないbinutilsのバージョンは何? 説明 ld は複数のオブジェクトファイルや書庫 (archive) ファイルを結合し、それ らのデータをリロケートして、シンボルの参照をまとめる。新たな実行プロ グ ラ ムをコンパイルして作成する作業の最終ステップは、多くの場合 ld の呼び 出しとなる。 ld はリンカコマンド言語のファイルを受け付ける。このファイルでリンク処理 を明示的に、また完全に制御することができる。この man ページではコマンド 言語を説明していない。コマンド言語や GNU リンカのその他の内容に関する詳 細 は info の `ld' エントリか、マニュアルである ld: the GNU linker を参 照すること。 ld の本バージョンではオブジェクトファイル関連の作業に汎用の BFD ライ ブ ラ リを用いている。これによって ld では多くの異なるフォーマットのオブジ ェクトファイルを読み、書き、結合することができるようになっている ( 例え ば COFF や a.out)。異なるフォーマットをリンクして、あらゆる種類のオブジ ェクトファイルを作成できる。サポートされているフォーマットや関連する ア ーキ テ ク チ ャに 関しては ` objdump -i' を実行すればよい。詳細は obj- dump(1) を見よ。 GNU リンカは柔軟であるだけでなく、診断 (diagnostic) メッセージも他の リ ン カより詳しい。多くのリンカはエラーが生じるとすぐに動作を停止してしま うが、 ld は可能な限り処理を続け、他のエラーに関しても知らせようとす る ( あるいはエラーにもかかわらず出力ファイルを作成してしまうことさえある) 。 GNU リンカ ld は多くの状況をカバーするように作成されている。また他の リ ン カとできる限り互換性を保つようにしてある。したがって ld の振る舞いは 、コマンドラインや環境変数によって細かく制御できるようになっている。 Merging In The GNU D Language Compiler To GCC http://www.phoronix.com/scan.php?page=news_item&px=OTk2NA D言語、いらっしゃい objdumpでx86-64のバイナリモードで逆アセンブルしたいんだけど上手くいきません $ /usr/local/bin/objdump -D -m x86-64 -b binary a.exe a.exe: file format binary /usr/local/bin/objdump: can't use supplied machine x86-64 -m i8086 -m i386 では上手くいきますが-m x86-64は逆アセンブルしてくれません なんででしょうか? obudump -d a.exeとすれば普通にx86-64を逆アセンブルしてくれます -m i386:x86-64 -b binary ... これで上手くいきました・・・すいませんでした すいません リンカ(ld)のオプション-Rについて教えてください マニュアルには「シンボル名とそのアドレスを filename から読み込む.」 とありますが、 これはライブラリのあるフォルダを指定しているということでしょうか? とすると、gccの-Lや-lはなんのために有るのでしょうか? -l LIBNAME, --library LIBNAME Search for library LIBNAME -L DIRECTORY, --library-path DIRECTORY Add DIRECTORY to library search path -R FILE, --just-symbols FILE Just link symbols (if directory, same as --rpath) -rpath PATH Set runtime shared library search path >>52 ん? よくわからないです。 例えば cc -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat -Wl,-R/usr/pkg/lib -L../lib -o pkg_add main.o perform.o -linstall -lfetch -larchive -lbz2 -lz -lnbcompat -lnbcompat を実行すると、 ../lib/libinstall.a(parse-config.o): In function `pkg_install_config': parse-config.o(.text+0x3f6): undefined reference to `fetchConnectionCacheInit' と言うエラーが出ます。 原因は、 -R/usr/pkg/libのところで、/usr/pkg/libというディレクトリが存在していないためだと思われるのですが、 -Wl,-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs -Wl,-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch -Wl,-R//usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat -Wl,-R../lib と追記した所、 cc:-R/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs linker input files unused sinece linking not done と出て、失敗してしまいました。 解決策は、/usr/pkg/libを作ってそこにlib**をコピーすれば良いかなとも思ったのですが、 これで良いでしょうか? >>53 >よくわからないです。 ド素人が何をしてるのか、わかる人がいるとは思えんけど --rpathってのは、暗黙にリンクされるlibファイルの場所を指定するんだけど (俺もよくわかってないので雰囲気でわかって頂戴) -Lはlibのある場所を指定するところ libhoge.aをlinkしたいとき、フルパスで指定すると ほげほげ/libhoga.a と書くところを -Lほげほげ -lhoge って、書けるっていうだけ libの依存関係によっては、書く順番によってはエラーになることがある 実績のあるtar玉から configure,makeして何やってるか、見て見るところから始めたら 言葉で覚えるより出来合いのもの見て覚えるほうを個人的にオススメする すいません。教えてください。 BSD/OSにてpkgsrcをコンパイルしています。 gccのバージョンは Using builtin specs. gcc version 2.95.3 20010315 (release) です。 何度か/usr/pkgsrc/bootstrap/bootstrapを行っていて、 失敗するごとに、ソースの修正→/usr/pkgsrc/bootstrap/cleanup→/var/dbの削除を行って 再度/usr/pkgsrc/bootstrap/bootstrapを行うという繰り返しで進んでいます。 /usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/pkg_install-20110805/addというディレクトリで cc -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/.libs -L/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch -L/usr/pkgs rc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat -Wl,-R/usr/pkg/lib -L../lib -o pkg_add main.o perform.o -linstall -lfetch -larchive -lbz2 -lz -lnb compat -lnbcompat ../lib/libinstall.a(parse-config.o): In function `pkg_install_config': parse-config.o(.text+0x3f6): undefined reference to `fetchConnectionCacheInit' ../lib/libinstall.a(pkg_io.o): In function `fetch_archive_open': pkg_io.o(.text+0x19): undefined reference to `fetchXGet' というエラーが発生しました。 エラーメッセージの内容が理解できないの としか、いえんな BSDIってまだサポートされてるのとかgcc-2.95とかそれでもマルチとか驚愕 autotoolsで作ってる共有ライブラリを fprofile-generate、fprofile-useを使って 最適化する方法の詳細な記事を書いてください。 ?ttp://d.hatena.ne.jp/pyopyopyo/20060311 私は高校2年の女子です。 C言語の勉強をしています。 次のようなプログラムを書きました。 #include <stdio.h> #include <curses.h> int main() { int x; getch("%u", x); printf("%\n", x); return 0; } コンパイルエラーが error: macro "getch" passed 2 arguments, but takes just 0 と、出ました。 /usr/include以下にcurses.hがあることは確認済みです。 原因と対策を教えてください。 error: macro "getch" passed 2 arguments, but takes just 0 エラーメッセージを読め。読み方がわからなければ先生に聞け。 getch()に引数は不要。他の関数と間違えてる? エラーメッセージ、本当は error: の前に "なんとか.c:6:14 " みたいなのがあるはずだが。 それに本当にcursesでプログラムを書きたいのかと。 もしこれが真面目な質問なら、C言語の質問をするようなスレで、どんなプログラムを 作りたいのか説明して質問した方がいいと思う。 本当にcursesを使うならUNIX系の人じゃないと知らないかもしれんけど。 初心者ですみません Cygwin で gcc を使ってます assert() を使用すると undefined reference to `_assert' エラーが出て困ってます どなたかご教授頂けると幸いです gccというかautotoolsなのですが ./configure --build=x86_64-w64-mingw32 と毎回指定するのが面倒なので、環境変数で指定できないでしょうか? alias conf='./configure --build=x86_64-w64-mingw32' とでもしとけばいいんじゃね? config.niceを拾っておいて2回目以降はそれ使わね? >>70 config.niceって初めて知った。 ググるとPHPやApacheで使われているもののように見えるけど、よくわからん。 >>70 head config.log してたわ〜と思ったけどそんなファイルできないぞ どうもautoconfの機能ではなく、configure.acに自分で処理書いて生成してるっぽいが SandyBridgeでg++ -march=native -mtune=native で作ったバイナリって Core2とかじゃ動かないみたいなんだけど、どのオプションでどれで動くかって 表か何かない? >>73 nativeだとAVX(-mavx)が入るからだろ -march=core2にしたらいいよ オプションはこれででる ttp://d.hatena.ne.jp/ktomoya/20100510/1273510042 >>74 おぉ、サンクス。 ちなみに、MinGW/g++.exe (GCC) 4.6.1でこんなんでた。 -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mavx -msse4.2 -msse4.1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=corei7-avx >>75 -mavx -msse4.2 -msse4.1 -maes -mpclmul -mpopcnt ... などがCPUごとに実装状況が異なる命令を使うってオプションだから SSE4.2やAVX、POPCNTなど最近できた命令に対応していないプロセッサだと動かない -march=nativeはコンパイルしたマシンのプロセッサなどからこういうオプションを勝手に付けてくれるものだから 対応表とか作るとCPUのカタログになってしまうので コンパイル済みのバイナリを別のマシンで実行したいならmarchやmtuneは指定しないか 対象が分かっているならその中で一番機能が少ないプロセッサに合わせて設定したほうがいいかと 普段Pythonを使っているんだけど、gcc on LinuxでCで何かの分野の処理をやるとしたら何の分野がいいかな? コーディングがマゾい奴はやりたくない。うひょー、コーディング楽しいって感じの週末にしたい。 wxPython と wxWidgets のバインディングが出来るツールをおながいしまつ windows7にしたらResource temporarily unavailableエラーが頻出するようになったんだけど どういうことこれ 問題と思うから問題になる 問題と思わなければ問題ない >>81 win7からメモリ管理の方式が変わったらしいし たぶんメモリアクセスのコンフリクトだと思うんだけど 直し方がなあ コンパイルするたびにがちゃがちゃとエラーで止まるのが非常にうざい 具体的に 何やったら、こうなった って、かいてほしいな 最適化しても助長なコードを吐くことがあるのを見つけちゃったよ んではそのケース用peephole optimizationを.mdに追加してくれ 転送先に書いて、転送先から同じレジスタに書き戻すことがある で、わかりますか? ターゲット書かないのはターゲット非依存ってことなのか、今日日x86に決まってんだろうがってことなのか 複数archで確認してるよ、peephole2使って 以下のようなコードでコンパイルは通るのですが 実行した時の表示が 1 1 のようになってしまいます。 1 2 になるつもりで書いているのですが 変数の受け渡しはどうすればいいのでしょうか? (円記号のところは本当はバックスラッシュになっています) #include <stdio.h> int test(a) { a = a + 1; return a; } int main() { int a; a = 1; printf("%d\n",a); test(a); printf("%d\n",a); return 0; } #include <stdio.h> void test(int *a) { *a += 1; } int main() { int a = 1; printf("%d\n",a); test(&a); printf("%d\n",a); return 0; } Commit: RX: Add return pattern ttp://gcc.gnu.org/ml/gcc-patches/2012-01/msg00627.html gcc/function.cの HAVE_return HAVE_simple_return の場合分けが悪いだけなのにね ここに書いても無駄だと思うけど、なんとなく >>99 特定アーキテクチャの問題で共通部分に手を出すのはむずいのでふ >>101 んではRX以外に問題を起こしているアーキテクチャを挙げてくれ 他のアーキテクチャはmdいじくって、回避してるよ どっちを修正すればいいかって話になるけど function.cの該当部分書いたのがイマイチだって感じかな? archによってはわざとmakeでコケるような細工してあることが注意したほうがいいよ 遅くなりましてすみませんが ご回答いただいた方ありがとうございました 対レジスタに関して演算結果で変化がないときは最適化してくれるけど 対メモリに対しては最適化されない時があるんだね、gcc レジスタ使い回しが出来る奴はあんまり影響がないけど メモリに依存したような奴は無駄なコードを吐いちゃうってことがある?ってことです aliasある疑いがある時はちゃんとメモリアクセスしないと仕方ねえしな。 内部的には3まででしょ、gcc -Oのあとの数字はなんでもうけつけるってだけで 最適化レベルっていっても細かなオプションが適時追加されるだけという やたらでかい数字に意味があったのってEGCS時代ぐらいじゃね? gcc4.7を使ってみたくて自前ビルドで詰まったんだけど,質問はここでいいのだろうか. 場所が悪ければ誘導願いたい Ubuntu 11.10で,gcc-4.7.0-RC-20120302をビルドしようとしてる. 標準エラーの最後の方がこんなのだったんでリンクができてなくて止まってるのはわかるんだけど glibcやらbinutilsあたり,aptにあるそれらしいやつは違うようだった 入れるべきパッケージなりが足りてない? それともlocateで出てくる奴にシンボリックリンクでも貼ればいいものだろうか ↓エラーログ /usr/local/bin/ld: cannot find crti.o: No such file or directory /usr/local/bin/ld: cannot find -lc /usr/local/bin/ld: cannot find crtn.o: No such file or directory collect2: error: ld returned 1 exit status 解決法探すコツみたいなものも教えていただけるとありがたい ログが膨大で何に重点をおくべきかわからなくなってる glibcのdevelみたいなのが入ってないような感じ、debian系はよー知らんけど 今のgccはビルドするときに必要なパッケージが増えてるから、ご注意を ttp://packages.ubuntu.com/oneiric/gcc >>121 Ubuntuにもmultiarch問題があるのか。 リナックスは問題だらけで使い物にならんよ。 リナックスがパッケージシステムが出来て糞になってる間に windowsは安定してみんな使うようになった。 メーカーがドライバーを作らないからな。 偽者のドライバーでは機能制限が多すぎて 最高のパフォーマンスを出すことは到底不可能だからな。 寿司じゃないんだから・・・・ それを言うならエサでしょう。あいにっく 釣りっぽい発言には見えないが・・・ パッケージのgcc4.6は入ってるから,glibc系の依存してるパッケージは入ってるはず. /usr/libとかに勝手に作っちゃうと先々何か入れるときに衝突しそうで避けてたんだけど /usr/libにあるはずのものが/usr/lib/i386-linux-gnuに入っちゃってるって記事を見て シンボリックリンク貼って走らせておいたら通ってたよ 現在make check中. ものすごく無理やりな感があって正しいのか不安だけど,とりあえず回答に感謝 multiarch問題は--libdir=/usr/lib/i386-linux-gnuで解決するんじゃないのか? あ,まさにそれっぽい これか. --libdir=dirname Specify the installation directory for object code libraries and internal data files of GCC. The default is exec-prefix/lib. 勝手に作ったシンボリックリンク外してやってみる うまくいかないな configureに--libdir=/usr/lib/i386-linux-gnuやら --libexecdir=/usr/lib/i386-linux-gnuやらつけて 何回か試してみたけど見に行ってくれてないみたい ldが探す場所ってld.so.confが読んでる奴じゃなかったっけ. こっちに/usr/lib/i386-linux-gnuも入ってるのだけど, ldconfig -pに出てこないから探しに行ってないんだよな ここが解決すればよさそうな気もするのだけど. このあたりの話題はスレ違いだろうか 64bitなgcc作りたいの? なら、32bitな環境入れとかないとコケるような いや,そも全部32bit環境…のはず. i386,i686はアーキテクチャの差であってbit数は関係ないよね? どこでコケてるのか、文章だけじゃ、わからないよ rpmなら、specファイル見たらって言えるんだけど あ,出てるエラーは>>121 です ldが/usr/lib/i386-linux-gnu/を見ずに/usr/libまでしか見てないらしくて crti.oとかが無いと言われる /usr/libから手動でシンボリックリンクを貼ってみたら一回通ったけど, そうじゃなくてオプションでそちらを見る方法があるなら知りたい 直前のコマンドは引数多すぎて何をしてるのかよくわからないけど (ビルドしてるディレクトリ)/gcc/xgcc のようです なんかまだ具体性欠いてるきがするので追記. gcc4.7.0RCのmake中,>>121 のエラー そのあとの出力は以下,直前のコマンドは貼れないくらい長いものでxgccを起動してるらしい make[3]: *** [libgcc_s.so] エラー 1 make[3]: *** 未完了のジョブを待っています.... make[3]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build/i686-pc-linux-gnu/libgcc' から出ます make[2]: *** [all-stage1-target-libgcc] エラー 2 make[1]: *** [stage1-bubble] エラー 2 make: *** [all] エラー 2 make[2]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build' から出ます make[1]: ディレクトリ `($HOME)/build/gcc-4.7.0-RC-20120302/build' から出ます ---ここまで--- 自分で判断できることと知りたい内容は>>137 の内容. --disable-bootstapつけてやってみるとか、適当だけど 自分もその辺でハマった口だけど、 build.log見たりとか コケたところを部分的に手動でやってみたりとか gccのビルドって、自力でやるのがだんだん難しくなってる、自分的には 4.6あたりで出来るか試してみるのも、ひとつの手 そりゃ、野良のldをmultiarch対応せずに使っているなら見ねーよな いろんなアーキテクチャに対応するために /usr/libにあったものを/usr/lib/(アーキテクチャ名)に移動してあるものがあって ldもmultiarchに対応したものを指定してやらないとならない,ってことか ldはbinutilsに含まれるってことで合ってる? binutilsも新しいもの入れたつもりだけど,古いの呼んじゃってるかもしれないから そのあたり調べてみる 本当にバカだな 意味が分からないなら、ubuntuのbinutilsつかってみろ それで解決 Debianのgcc-4.7をリビルドして使おうとしないところが、頑なな奴だな。 >>142 Ubuntu,もしかしたらDebianからかもしれんけど ディストリビューション特有の問題でそれに対応したのがちゃんと用意されてるから 素直にそれを使え,でいいんだろうか とりあえず自分で入れたbinutils削除してld -vでfor Ubuntuの文字を確認してから もう一度make中 >>143 Linux使い始めてそう経ってないから,常識をわかってないところは多々あると思うんで そういうところこそ聞きたかった 4.7使いたいだけならgnuの素のソースだけじゃなくて, Debianから試験的パッケージ出てたんだね だめならこっち試してみる --- a/src/gcc/config/i386/t-linux +++ b/src/gcc/config/i386/t-linux @@ -3,3 +3,5 @@ # t-slibgcc-elf-ver and t-linux SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver \ $(srcdir)/config/i386/libgcc-glibc.ver + +MULTIARCH_DIRNAME = i386-linux-gnu GCC 4.7.0 released [2012-03-22] __transaction_atomic の使い方がわからん 中に出てくる変数全部アトムボーイになるの? 超高速にシンタックスチェックだけしてくれるモードとか無い? 何の処理もせず、時間稼ぎをしたいとき、どのような方法がありますか? 例えば、キー入力を受け付けてから、5秒あけて、入力された内容を表示するという場合です >>147 gcc/testsuite/c-c++-common/tm/trxn-expr-2.c >>153 __transaction_atomic (a+b+c); これがどう働くのかを聞いてるんだよ・・・ >>154 噛み付かれても、俺もわからんのだけど gcc gcc/testsuite/c-c++-common/tm/trxn-expr-2.c -S -fgnu-tm -O2 でもやって、自力で答え見つけたら なんとなく、ポインターアクセス経由でやってるだけな感じだけど (思ってる答えとは違うかもね) gcc (GCC) 4.8.0 20120316 (experimental) macportで入れたgcc46で gcc-mp-4.6 -march=corei7 -E -v - </dev/null 2>&1 | grep cc1 としても、>.75のようではなく -fPIC -mmacosx-version-min=10.6.8 -march=corei7 -m64 としかででないのですけど、march=corei7の効果はないということでしょうか? corei7をcorei7-avxやcore2にしてもどうようです。nativeにしたときだけ>>75 のようにでてきます。 だって明示的にCPU指定したら命令セットは自明だろ キャッシュサイズは個々に違うから指定されないわけで そうか。d ということは、corei7でmarch=nativeやmarch=corei7を使うと、 mfpmath=sseを使う意味はないという理解で大丈夫ですか? >>159 定義済みマクロがあるやつは cpp -march=core2 -dM < /dev/null | grep SSE とかで分かるな 混乱中 manを読むと、-mavxは MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,SSE4.2 and AVXをサポートしているから 配布目的でなければ、-mmmxや-msseなどは付ける必要ないんだろうか? >>75 を見ると、-march=nativeをしたときには-mavxが自動的につくけど、 march=corei7-avxでは-mavxは自分で付けなければいけないということなのか? うむむむ >>161 avxが有効だと__AVX__が1に定義されるから>>160 でそれを調べたら分かるのでは >>161 -marchや-mtuneは-msseや-mavxみたいなオプションのセットという認識だけどな nativeの場合はプロセッサのフラグを呼んで有効になっている機能を使おうとするから msseみたいな物が個別につくのでは 例えばKVMとかで仮想CPUの場合に、物理CPUにある機能が一部無効になってると個別のオプションが変わったりする {"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7, PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX | PTA_CX16 | PTA_POPCNT | PTA_AES | PTA_PCLMUL}, if (processor_alias_table[i].flags & PTA_AVX && !(ix86_isa_flags_explicit & OPTION_MASK_ISA_AVX)) ix86_isa_flags |= OPTION_MASK_ISA_AVX; SSEにしろAVXにしろ、OSが明示的に許可してないと使えないんだから 勝手に生成されたらまずいんでね gcc -Q --help=target -march=corei7-avx でわかるね 現在時刻を端末上で、 ○時○分○秒 と表示させるにはどのような関数があるでしょうか? 環境はlinuxです。 >>169 このへんから ttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/settimeofday.2.html >>170 若干ずれるがcppに頑張っていただけば #include <stdio.h> int main(void) { puts(__TIME__); } >>172 なるほど、それをcppの代わりにインストールすればいいのか。 >>174 最近の事情はよー知らんので教えて欲しいな、どこ見りゃいいの? >>175 POSIX.1-2008 marks gettimeofday() as obsolete, recommending the use of clock_gettime(2) instead. って書いてある。 どうやって測ったのか知らんけど 遅いっていうのなら、glibcのソース見て、自前で実装するしかないでしょ get_wild関数で変数名がxyzです。 何が起こるでしょうか? >>181 つまりclock_gettimeは使わないという結論か >>183 time関係は遅いのかもしれんけど、今時の実行環境ならさほど問題になるようなことはない気がするけど 何をするかによっても関数の実行時間が問題になるかは変わってくるからね gccをビルドすると/usr/lib/に妙なperlかpythonのスクリプト(忘れた))が生成されるけど、あれ何するためのものなの? GCC4.7でIntelコンパイラーのように__Cilk命令がマージされたような話を聞いたけど、これ本当にマージされてるの? どうやったら動くの?何か特殊なビルドオプション等が必要? system関数を使ってmpg123を呼び出し、 mp3ファイルを再生しようとしています。 そして、再生の途中で再生を終了させるにはどんな方法があるでしょうか? 端末からコマンドラインで直接打つ場合はctrl+cで止められますが、 ctrl+cと同じことをgccでやろうとしたらどうすればいいのでしょうか? 環境はlinuxです。 systemはやめてfork-execでpidを得た後killすればいい >>196 popenとmpg123 -Rでやれば kill `ps | grep mpg123 | awk '{print $1;}'` ってやるシェルスクリプトをsystemすればいいんじゃね? os xをマラにしたらgccが消えてしまいました。 どこへ行かれたのでしょうか? >>200 XcodeのメニューPreferencesからDownloadsタブのComponentsにあるCommand Line Toolsをインストールしれ gcc/config/i386/i386.cの distance_non_agu_define_in_bb の関数が ヌルポで落ちることがあるぜえ こうして不具合は残ったままになるのでした。おしまい。 ヌルポでコンパイルが止まるだけ 君には見つけられるかって感じだからね gcc4.7.1+pthreads_win32でスレッドモデルposixでビルドすると、c++のプレコンパイルヘッダのmakeでこけます。 operator<でエラーで、どうやらptw32_handle_tが構造体だから比較できないってことらしい。 どなたか対処法などご存知ではないでしょうか? おそらく文脈的にoperator<なんていらん所だろう コンパイラが変な解釈してるだけと思う そっちかよw pthreads_win32をやめるのがいいかと。 ここの3番 ttp://sourceforge.net/mailarchive/message.php?msg_id=26533137 楽しようとして、ハマりましたって、オチにならなきゃいいけどね >>214 サンクスです。 さっそく、試してみます。 ビルド時に内部エラーが出るとバックトレースしてくれるようになってるな forの中のx++をx+1とかx+2にすると無限ループになってしまいます。 x++以外にしたいときはどう書くのでしょうか? linuxで4.4.5です(円記号は実際にはバックスラッシュです) #include <stdio.h> int main() { int x; for(x=0; x<10; x++) { printf("%d\n",x); } return 0; } >>222 x+=1 とか x+=2 とかにすればいいよ。 gcc 特有の事情でない話は C スレに行った方がいいよ。 mesてsh3のローカルバージョンなんだが、setjmp.hが無い。 longjmpの代わりになる方法とかないか? >>226 newlibあたりからもらってくればいいんでないかい gcc の新しい CPU 向けのポートの話はここでいいの? >227 なるほど。 とはいったものの、どうしたらいいのやら。 newlibのソースって当然ASMだろうな。mesのGCCですんなりコンパイルできる だろうか? >>229 あれはふつーのsh-coffだろう 何も考えずにプロジェクトに入れちまえ 何を悩むことがあるのか分からん。 とりあえずnewlibをコンパイルしてみればいいじゃないか。SH4ということにして。 newlib/libc/machine/sh/setjmp.S GDBについて聞きたいんだが、ファイルポインタなどで外部ファイルからパラメータを読み込むプログラムなんだけど デバックする場合、エラーは起きる?それともこれがエラーの原因なんかな うーん、ダメやなGDBうまくわかってないから伝えられないな すまんな ニシくんテクとして壊れたパーツもあえて保持するというテクがあるんやで プログラム的におかしいってことなんかな コンパイル時にエラーは言われないんだけど、実行結果でエラー言われるんだよね もう一度確認してみますわ scanfの使い方がおかしいだけでしょ &のつけ忘れとか エスパーすげえな SetFilePointerとデバッガで挙動が変わるのと何の関係が?としか思えなかったわ 書き方がおかしな所はコンパイル時にわかるけど 実行時の問題まで探してくれてるわけじゃないからね エスパーな質問なのに答えてくれてほんとありがとう scanf確認したんですが&は一応ついてました もう少し色々お聞きしたいのですが、C言語の話題になってしまいそうなのでC言語スレで聞いて見ようと思います GDB自体は実際の実行と同じように動作すると分かって良かったでうs GCCVer3の最終版使うのとGCC最新版(Ver4)使うのではどっちが安定なんだろうか 対応したarchなら、コンパイルという動作はどっちも安定してるんじゃね コンパイラ単体で見れば歴史の長い3の方が枯れていると言えるかもしれないけど、 そう単純なものでもないんだよね。 C++ABI がちょっと違ったりするので、今更3を使うのは問題の種になると思う。 と言うわけで私としては4を推す。 short-enum な --taret=arm* な 4.6.4 で, short-enam な --hist=arm* な 4.6.4 を作ろうとすると 色々まずいっぽいんだが, 既知の事実ですか? コンパイル時にしてするものでビルド時に指定するもんじゃないような >>251 やっぱそうなるか じゃあ libgcc だけ, 単独に short-enum にできる安直な方法ってある? 4.7だと libgcc/config/arm/t-linux に仕込めばいいような もしくは make CFLAGS_FOR_TARGET="-g -O2 -fomit-frame-pointer" CXXFLAGS_FOR_TARGET="-g -O2 -fomit-frame-pointer" な感じか? たのもう gcc 4.7.2 のコンパイルでつまづいてる (gmp 5.1.1、mpfr 3.1.1、mpc 1.0.1 はコンパイルできた) ../configure --enable-languages=c,c++ --enable-bootstrap --enable-shared --enable-threads=posix \ --enable-checking=release --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object \ --disable-dssi --disable-multilib --with-gmp-lib=/usr/local/lib64 --with-mpfr-lib=/usr/local/lib64 \ --with-mpc-lib=/usr/local/lib64 --without-ppl --with-tune=generic の後の make 実行したら mkdir -p -- x86_64-unknown-linux-gnu/libgcc のあるフェーズで、 checking for suffix of object files... configure: error: in `/w/gcc/gcc-4.7.2/build/x86_64-unknown-linux-gnu/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details. とか言われた x86_64-unknown-linux-gnu/libgcc/config.log には configure:3344: /w/gcc/gcc-4.7.2/build/./gcc/xgcc -B/w/gcc/gcc-4.7.2/build/./gcc/ -B/usr/local/x86_64-unkn own-linux-gnu/bin/ -B/usr/local/x86_64-unknown-linux-gnu/lib/ -isystem /usr/local/x86_64-unknown-linux-gn u/include -isystem /usr/local/x86_64-unknown-linux-gnu/sys-include -V >&5 xgcc: error: unrecognized command line option '-V' とか出てるんだけど、何が悪いかわかる人いたら教えてくらさい ただし英語のドキュメントは読めない ちなみに OS は CentOS 5.3 x86_64 でございますれば 他に補足の情報が必要であれば指摘ください command line option とみなされてるのが問題なんだろ shell 変えてみるとか うーん、sh、csh、ksh、bash を試しましたが変化ありませんなあ・・・orz >>255 同じような症状で --disable-libquadmath つけたら通った 'unrecognized' command line optionでxgccのエラーだぜ、ってことで>>257 はおかしい xgccってのはまさにいま作ってる最中のgccで、そいつが-Vを受け付けてない(手元のgccで試したら確かに4.7系は-Vを受け付けない) -Vの出力から'compute suffix of object files'をしようとしてるんだから>>259 もおかしい エラーはlibgccのconfigureで起きてるっぽいので>>260 もどうかなあ つーことで、configureのその行の前後にxgcc -B中略 -Vの結果を加工して suffix of object files(たぶん.o)をどっかの変数に入れてるところがあるはずなんで その辺書き換えて直接.oをセットしてしまえばいいと思う 環境差かなんかで普通入り込まない過去のgcc互換かなんかの分岐に入ってしまってるんだろう と予想、外れてたらごめん たぶん、glibc-develあたりのパッケージが入ってないような # yum groupinstall "Development Tools" をやれば、いいような >>262 漏れも最初にそう思ったんだけど、 わざとボケてみたんだ。 ごめん。 すいません、これでできました su mkdir /w; mkdir /w/gcc; cd /w/gcc wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.7.2/gcc-4.7.2.tar.bz2 wget ftp://ftp.gmplib.org/pub/gmp/gmp-5.1.1.tar.bz2 wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.bz2 wget http://core.ring.gr.jp/pub/GNU/mpc/mpc-1.0.1.tar.gz tar xvfj gcc-4.7.2.tar.bz2 tar xvfj gmp-5.1.1.tar.bz2 tar xvfj mpfr-3.1.2.tar.bz2 tar xvfz mpc-1.0.1.tar.gz mkdir gcc-4.7.2/build mkdir gmp-5.1.1/build mkdir mpfr-3.1.2/build mkdir mpc-1.0.1/build cd gmp-5.1.1/build ../configure --enable-cxx make #make install cd ../../mpfr-3.1.2/build ../configure make #make install cd ../../mpc-1.0.1/build ../configure make #make install cd ../../gcc-4.7.2/build ../configure --enable-languages=c,c++ --enable-cxx --with-newlib --disable-multilib --enable-threads=posix --with-tune=amdfam10 export LD_LIBRARY_PATH=/usr/local/lib64 make #make install あ、↑の #make install は make install でございますれば で、 ../configure --enable-languages=java --with-newlib --disable-multilib --enable-threads=posix --disable-bootstrap とするとコケて、どうしても Java コンパイラが作れないです libtool: compile: /w/gcc/gcc-4.7.2/build_java/./gcc/xgcc -shared-libgcc ---snip--- java/net/.deps/natVMInetAddress.Tpo -c java/net/natVMInetAddress.cc -fPIC -DPIC -o java/net/.libs/natVMInetAddress.o java/net/natVMInetAddress.cc:42:52: error: declaration of C function ‘int gethostname(char*, int)’ conflicts with In file included from java/net/natVMInetAddress.cc:12:0: /usr/include/unistd.h:845:12: error: previous declaration ‘int gethostname(char*, size_t)’ here make[3]: *** [java/net/natVMInetAddress.lo] Error 1 Web 検索しても、なぜかコケて回避できないみたいな記述があったような無かったような あー、 ../configure --enable-languages=java --disable-multilib --disable-bootstrap にしたらコンパイルできますた が、実際に .java ファイルをコンパイルしようとすると gcc: error trying to exec 'ecj1': execvp: No such file or directory とか怒られる ググったらこんな感じ http://barutan.s296.xrea.com/cgi-bin/tdiary/?date=20100220#p04 お手上げでしょか? GCJ使うのが目標だったのね。 ディストリビューションのspecファイル参考にするといいんじゃないかな。 gcc 4.8.0をmakeしようとしたらこんなの出ました。 この前にmakeをビルドしたのですが、makeのビルドに失敗したって意味でしょうか? http://www.07ch.net/up2/src/lena8828.png makeで始める行はmakeコマンドが出力してる。[n]はネストの深さ。 エラーが起きているのはシェルにコマンド行で渡して実行させているコード。 EOFが出てるのは、Win32上で有名な > [Please ignore a syntax error on the next line - it is intentional] じゃないんだな。この部分は出てないので。 http://www.07ch.net/up2/src/lena8830.png すみません。今見たらbuild/libiberty/config.logにNo such file or directoryと書いてありました。 ぐぐってみます。 ありがとうございました。 しつこくてすみません MinGWにpthreadsをインストールしてgcc 4.8.0をコンパイルしようとしたのですが、sys/systemcfg.hが無いといわれて ググったのですが、見当たらないのでwinpthreadsをコンパイルしようとしたのですが、makeでエラーになります。 http://www.07ch.net/up2/src/lena8836.png configureもmakeも改変せずにビルドしているのですが、makeが存在していないファイルを作ろうとしていてmakefileに問題があるのでしょうか? GCC 4.8.0 released [2013-03-22] しつこくてすみません make[1]: *** `src/libwinpthread_la-barrier.lo' に必要なターゲット `src/.dirstamp' を make するルールがありません. 中止. make: *** [all] エラー 2 となるんですがmakefileの該当部分は libdummy.la: $(libdummy_la_OBJECTS) $(libdummy_la_DEPENDENCIES) $(LINK) $(libdummy_la_OBJECTS) $(libdummy_la_LIBADD) $(LIBS) src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/libwinpthread_la-barrier.lo: src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) これでは.dirstampは作れていないのでしょうか? くっつけるerr.logを間違えました上の部分のエラーログは process_begin: CreateProcess(NULL, /bin/mkdir -p src, ...) failed. make (e=2): 指定されたファイルが見つかりません。 make[1]: *** [src/.dirstamp] エラー 2 make: *** [all] エラー 2 こちらです cd src touch .dirstamp cd .deps touch .dirstamp したらmakeできました お騒がせしました 4.8で動かなくなる奴たくさんありそうだな 普通の実行順序で考えると動きそうだし たまたまローカル変数ですべて収まってたから、 過度に最適化されたのかな? SPECのコードが壊れた話? C言語は高級アセンブラで、思った通りの機械語コードを吐いてくれる、 なんてのが昔話だと、いい加減みんな認識すべきなんだな。 現代のC言語は、最適化オプション付けていて、未定義を踏んでたら 悪魔と契約してでも最適化を掛けてくるもんだ、と思うべき。 >>284 このスレでこの程度のジャーゴンもわからないとか。 brokenな日本語でも日本語の話者ならば補って理解できる。 実行される可能性がある未定義動作のコードが一行でも混じっていれば そのプログラムは起動直後からソースコードを一切無視してどういうふるまいをしても構わない。 過度の最適化ではない。 >>286 底辺職種に従事している人が多いからね そんな奴は脳レベルが低すぎてbrokenな日本語は理解不能 4.8、動かない以前にビルド通らんのが出てきたぞ バージョン上がる度に型チェック厳しくなる一方だぜ http://gcc.gnu.org/projects/cxx0x.html Rvalue references for *this : GCC 4.8.1 fast-mathオプションをつけるとisnanが機能しなくなるのだけど、何かいい手はない? そのファイルだけfast-mathを外してコンパイルする。 と、どうなるか試してほしい。 fast-mathつけなければ大丈夫。 fast-mathをつけると、isnan以外にも、a != aで判定する方法もダメ。 何かいい方法ないかな -ffast-math をばらして必要なオプションだけを指定してみたら? -ffast-math Sets -fno-math-errno, -funsafe-math-optimizations, -fno-trapping-math, -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans and fcx-limited-range. -ffast-math -fno-finite-math-only の併用でok 4.8ビルドしようとするとgccでintl-printと__printf__が不明と怒られる 仕方ないのでconfig.hに#include <libintl.h>を書き足すと>>255 と同じ事 言われて怒られる、しかしgmp等はインスト済み これってx64のライブラリ以外にx86のライブラリも必要って事なのかな? コマンドラインまで >>255 と同じなら × --with-gmp-lib=/usr/local/lib64 ○ --with-gmp=/usr/local mpfr,mpc も同様 レスありがとう! んでも 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の関数が不明って言われるのかなあ。 消すなら --disable-multilib ではなくて --disable-sjlj-exceptions だろjk あと、もし binutils を一緒にビルドしようとして、 gcc のフォルダ内に binutils/{なんやらかんやら} へのリンクを張ってるなら、 両者に共通のライブラリが、バージョン違って失敗するかも 消したけどダメ。。 ターゲット・ホスト・ビルドの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見ても「我々は悪くない、文句言われる テメーが悪い」みたいな事書いてあるし。。。。 もうネルソン! やっとでけたあああ 七誌さんそして>>300 ありがとう! 一応手順 gcc用のディレクトリを作成、binutilsをビルド→インストール gccをコンパイラのみビルドしてinstall-gcc ここでmsys上のmingwを今作ったgccに切り替え mingw-w64ランタイムをヘッダのみビルド→インストール ランタイムをビルド→インストール gccの残りをビルド→インストール 今まで通常使ってるmingwだけでビルドしようとしてたのが間違ってた?っぽい なんだかよく分からなかったけど強引に潰したエラー、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云々がヒントになってビルド出来た、ありがとね 追記:libintlがぶっこわれてた 今までどうやってビルド通ってたんだろ・・・・・・・・・ ネタじゃないので聞いてください。 一番最初のgccはどのようにコンパイルされたのですか? 別のコンパイラを使う。UNIXのccとか。 歴史の話じゃなくて実用的な意味でどうするかといえば、 オフィシャルでバイナリのgccが配布されているのでそれを使う。 ネタじゃないので聞いてください。 一番最初のccはどのようにコンパイルされたのですか? gccをどうやってコンパイルするかを勉強してると そのあたりまで平然と遡らされるよな Z80アセンブラをN88-BASICで実装しようとしたのは良い思い出… >>311 > 一番最初のccはどのようにコンパイルされたのですか? 当時一般的に使われていた, Unix 上の PCC 互換コンパイラでコンパイルされたんだが, なんか問題あるの? ネタじゃないので聞いてください。 一番最初のアセンブラはどのようにアセンブルされたのですか? multilib有効にしてGCCビルドしたら、ライブラリビルドでldちゃんが 32ライブラリに64libを合体させてしまいまする export -m32 -L/lib32 とかにしても言う事を聞いてくれませぬ ググっても、バカには無理みたいな風潮 TDMとか、どうやってmultilibなGCCビルドしてるんだろ? gccの2.95.3なんですが、 gccがコンパイルされたときの./configureに渡された設定など 調べる方法は無いでしょうか? gcc -vは? どうでもいいことだが、なぜそんな化石を使うのか聞いてみたい 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 は試してみましたが、ダメでした。 >>325 スマートリンクを使った方がてっとりばやいんじゃね? >>328 レス、ありがとうございます。 スマートリンクもコードサイズ削減に効果が無くはありませんが、(newlibは結構細かく ソースが分けてあるので)効果は小さいと思われます。 例えば、newlibの場合newlib内で使用する静的変数を(マルチスレッド対応等が容易なよ うに)_reent構造体にまとめてありますが、これをリンクするような関数を一つでも使用 してしまうと_reent構造体に関連する関数が多数リンクされ、コードサイズが肥大します。 これは(実行時に呼ばれることは無くても)未定義シンボル解決には必要であり、 -Wl,--gc-sectionsでは防止できません。 コードサイズの肥大の起因となるライブラリ関数が(質問に記述のように)特定でき、これ がごく少数なら、この関数を使用しないようにプログラムを書き換えてしまえ、という わけです。 gccじゃなくてリンカの仕事 例えばAppleのldなら-why_liveとかあるから、とりあえずman ld 使ってる*.oをnmして未定義シンボルをリストして、 シンボルがどの*.aで定義されてるかnmして調べて、 *.aをar xして*.oにしてnmして、 以下収束するまで繰り返し。 多分機械的に出来るんじゃないか? Cの場合、使われる*.aは引数で与える必要があって、 最初から全リストが分かってるわけだし。 >>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 はい、その方法(それを行うツールの作成)は最後の手段として考えています・・・ ld --help --cref 相互参照表を出力する -Wl,--cref >>332 ありがとうございます。 --crefで目的を達せそうです。 cygwinで gcc 4.8.1 コンパイルしたけど、エラーが2つでてインスコできんわ・・orz gcc -S -g で出力されるアセンブルコード中の.locの情報を 該当するCソースに置換するフィルタはどこかで公開してませんか? 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 >>337 ありがとう。それに-gつけたら出来ました。 ではお言葉に甘えて。 カバレッジを調べるためgcovすると自分のソース以外の iostream.gcovとかも大量にできてしまいます。 これを指定のディレクトリ以外は生成しないようにできないものでしょうか? 今のところ-pをつけてファイルを生成し必要のないフォルダのものをrmで消してます。 gcov --help -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する >>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は消えるので気にしなければ済む問題かもしれません。 プリプロセッサの話ってここで大丈夫?スレチだったら流して gccの-EオプションでCライクな言語のプリプロセスかけてるんだけど、そのマクロの記述で #define get_pi(data) (6'(data)<<3)って感じの記述してて、 これの ' の部分が文字データ記述の開始として扱われてdataが置き換わらないんだけど、対策ないですかね? SystemVerilogかね? #define s ' #define get_pi(data) (6 s (data)<<3) 空白が入るけど動くよ。警告も出るけど。 規格上問題ないか、どのGCCバージョンでも動くかは分からん。 >>346 返信ありがとう御座います! 早速試したら出来ました。けどなぜ動くのかわからない… 因みに使ってるのNSLという言語です。ハードウェア記述言語なのは一緒ですかね >>347 dataが置換された後に再走査されてsが置換されるから動く。 だから#define s ' が動けば、問題なく動く。 >>348 プリプロセッサってプロトタイプ宣言みたいに上から順に〜ってわけではないのか。一緒だと思ってました gcc4.9のtrunk版、3ヶ月くらいプラグマバグでビルド出来なかったんだけどようやく修正された >>349 いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。 マクロ引数dataが展開された後に、その結果に対して再走査されて 普通の地の文と同じようにsがマクロ展開される。 最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて トークンを置きえるから。 (6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。 dev/nullを出力先に指定するとscanfなどで入力した内容が表示されなくなるという噂を聞きました どのように指定すると良いか教えてください >>355 入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。 >>355 scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで? >>360 ウイーンドーズにも/dev/nullがあるんですか? 察するに、パスワード入力ではechoさせたくないとかそれ系の話だろ? 普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか >>363 標準出力のリダイレクトでは、その望みを叶えられないのだが。 凄くも何ともない。 int f(int n) { while (--n) ; return n} がgcc -O2 (4.6.3)で int f(int ) { retunr 0; } のようにコンパイルされました。 この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか 知りたいのですが、どのへんを調べればいいのでしょうか? (質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、 場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。) ただの定数最適化に見える。 あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。 すいません。ドラゴンブックは学生時代に買って眺めたことはあります。専攻はコンピュータ科学でした。 コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、 どの程度の難しさの問題なのかもわからないのです。 定数最適化、なんでしょうか? while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。 追伸: int f(int n) { while (n=n-2) {} return n; } main() { f(-2); } とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。 -O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。 GCCはどうだか知りませんのでドラゴンブックレベルの一般論ですが、 ループ最適化は普通にやるので、条件式は判断します。 制約条件がそこではっきりするので最終的には通常の定数最適化 パスで消えてるんじゃないでしょうか。 ドラゴンブックに書いてなかったっけ? 停止性が判断できるかという疑問ですが、判断できなければ 最適化はやらないということになるはずです。 逆に聞きたいのですが、ヒューリスティックに何かできる んでしょうか? 実行時判断みたいなもの? 前半はなんとなくわかりました。ドラゴンブックは多分実家にあるので参照できませんが、、、 後半ですが、誤用かもしれませんが経験則の意味で使いました。 停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、 深い意味はなかったです。 >>365 ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、 外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。 似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない? >>371 中学生が大好きな架空の生物が掲載された魔導書だよ 恐れおののきつつも憧れを抱き、本棚の奥で埃を被っている一冊 忘れた頃に自分の娘がドラゴンを召喚して世界を崩壊へ誘ったりするアレ >>365 l1: --n; if (n != 0) goto l1; return n; 不変式解析で、 l1: --n; if (n != 0) goto l1; return 0; nの非到達性で、 return 0; libdwarfがELFに依存してて泣ける… Windows(MinGW)だとPE+DWARFだから使えないのが残念 MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば なんとかなりそうだけどDWARFの知識が必要になるし… libdwarfをPE対応にしてupstreamにパッチ投げれば 他の人も幸せになれるんでないの 正直libdwarf内で最低限のELFエミュレーションをしようと思ってソース 見たけどめげた…ごめんよ とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ それでDWARFになじんだらまたトライしてみたい どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな gccのないLinuxなんてLinuxじゃないやい CentOSのGCCは糞古いから最初から入ってなくても問題無い ただ新しいのを入れるには色々手間は掛かる gccとg++は最近不具合があるから、clangに乗り換えることにした。 >>394 「ロボットじゃないよ,アンドロイドだよ」って応えないと 何を言ってる。 あれは立派なロボだ。設計図を知らんのか。 >>381 Solarisにccがないとかいう話が昔なんとかかんとか > どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな > gccのないLinuxなんてLinuxじゃないやい え?Linux ですら clang に移行したの? >>403 ちげーよ、標準インストールと開発インストールの違いもわかんねーコゾウだよ 今日4.9をsvnからチェックアウトしてビルドしたんだけど、gfortranのopm_lib.modとかバイナリになった? 去年9月頃ははテキストだったけど仕様変わったのかなそれともビルド失敗したのかな あ、opm有効にしてビルドしたら実行ファイルは動いてるから仕様変わったのね 履歴にはなんも書いてないっぽい 同じく昨日ビルドした4.8.3のスナップは未だにテキスト形式なんだけどなー 更に勘違い。去年9月の4.9もバイナリだった、4.8はずーっとテキスト形式 あーんもう、ごめん! せやな MacOSは-stdlib=libc++をつけるのがめんどくさい trankのgccが4.10になってた セグメントエラー多すぎ GCC4.9ってOpenMP4.0フルサポートしてんの? nmの出力結果とオブジェクトファイルを合成して表示する方法はありますか? objdumpを見てもそれらしいオプションが見当たりません >>417 % ./search_symbol.py -C NCursesWindow::scanw /lib/* /lib/libncurses++.a: cursesw.o: 0000000000000100 T NCursesWindow::scanw(int, int, char const*, char*) /lib/libncurses++.a: cursesw.o: 00000000000000b0 T NCursesWindow::scanw(int, int, char const*, ...) みたいな出力が得られればいいてこと? だったら https://github.com/katonori/utils/blob/master/search_symbol.py は? 自分はundefined referenceが出たときにシンボル検索するのに使ってます。 LDでMAP履かせるのは ハックしてる(たい)のかな 盗用対策でわざと読めないコードにしたらしいけど いまじゃこんな時代遅れのコンパイラをパクる人はいない 最近 C++ を勉強しはじめたのですが、 g++ のエラー出力の形式が gcc とものすごく違うのに面喰っています。 オプション指定などで gcc と同様の形式にすることはできないのでしょうか? すいません。 勘違いしてました。 cpp を gcc でコンパイルしたときの >gcc -o sample sample.cpp >/tmp/ccHobvfJ.o: 関数 `main' 内: >sample.cpp:(.text+0xa): `std::cout' に対する定義されていない参照です 「sample.cpp:(.text+0xa)」に面喰ってたのですが、g++ でコンパイルしたら ちゃんと知ってる書式で出ました。 O2でいつもやってます。 Ofastなんてのもあるのね。 -fdiagnostics-color=always GCC6 >>452 ABCDGCC アルファベットのその次は〜♪ スレの平均年齢あげてんじゃねぇwwwww(おれモナー) Windows7でMinGW入れてCの勉強やってます 文字コードがcp932のソースコードをコンパイル・実行するためのオプション -finput-charset=cp932 -fexec-charset=cp932 これを毎回コマンドラインに手打ちするのがつらくなってきたのですが どこか設定ファイルに書いておいて自動適用する方法ってないでしょうか ググっても見つけられませんでした 設定ファイルは分からないけど、 コマンドラインで打ってるならバッチファイルか doskeyのマクロ機能を使えば手軽に簡略化できると思う。 個人的にはmakeの使い方を覚えてmakefileを書くことを勧めるが、 入門の難度と中毒性が高いのでちょっとした覚悟がいる。 さらにググりまくって何とか出来ました! ・コマンドラインで「gcc -dumpspecs > specs」と打つ ・出来上がったspecsファイルをテキストエディタで開く ・cc1セクションを探し、任意のコンパイルオプションを追加記入し上書き保存する ・specsファイルを「gccのインストールディレクトリ\lib\gcc\バージョン名」下にコピーする >>464-465 ありがとうです makeは今の自分には難解すぎて断念しました 将来の課題にしておきます mingw使ってるならcp932捨てた方がいいよ わりとまじで cp932なんてsambaのPC側の文字コード設定ぐらいの時にしか出てこない気が。 Linux側では単純にutf8でやってるだけなんで。 え 全く別の話? >>467 それだとその環境上で実行される全てのgccでオプションが付加されちゃわない? 思わぬバグやエラーを招くこともあると思うよ できるなら他の人も書いてるようにmakefileを書く方が切り分けが楽で後々良いかと 大域的に影響がある環境の変更をするよりは、必要最低限の範囲にのみ影響するような変更に留めるのが健全な実行環境を維持するコツだよ オプションを加えるだけのmakefileなら単純だし もしくはこれも提案出てるけどエディタ変えてプログラミングはutf8でしかやらないようにするとか エディタ変えようと-fexec-charset=cp932は外せないんだから何の解決にもなってないでしょ exec-charsetの方はプログラム内でエンコーディングしろって意味かと思った >>471 たしかに 正直、-fexec-charsetの存在を忘れてた でもこれってプログラム内の文字列をどの文字セットで扱うかってフラグだったよね? win向けのプログラム開発をしてるのではなく、単にCの勉強をしてるだけだってんなら別にこのフラグなしでutf8でいいのではないかとも思う 確かに学習のためだけなら 「コマンドプロンプトの方をUTF-8環境にする」 という対処方法も考えられるね。 ソースも実行環境もUTF-8に統一してスッキリ。 Windowsさっさとファイル名もUTF-8にしてくれないかな ANSI版Win32APIのコードページを変更出来ると思うから一応対応済じゃね アプリケーションの方が未対応だと問題あると思うけど 秀丸もずっと前からUTF8です。 改行もLFだけにしてますw 「内部コンパイラエラー(ICE)に関するものなど深刻なものを含む110以上のバグが修正されている」 GNU Project、バグを修正した「GCC 6.2」リリース | OSDN Magazine https://osdn.jp/magazine/16/08/23/160000 6.2.0 メイン用、avr、rl78、rxのマイコン用をビルドしてみた 警告がカラフルになって、実行ファイルサイズが概ね小さくなる avrのoptibootが -O2でビルドできるようになった ggrks …意味は知らないんだけど、とりあえず。 >>491 若い奴はナニコレ、ひくわだろうが、ゆとりおっさんには超面白い。 まさにgjカキコ >>495 Linuxカーネルがコンパイルできるようになったら clangの時代だと思う それまでは覇権は取れないんじゃないかな 別に元コードがC/C++だったら、gccでもclangでもどっちでもよくね? clangじゃなきゃいけない事って何? gccは、コピーさせないために以前はわざと読みづらいコードにしてた ってきいて正直引いた。 もうclang/llvmでいいやとも思う。 >>500 マジか フリーを謳ってるくせにストールマン最低だな GPLに感染してるという主張を確実に裏付けるために わざと持って回った複雑なソースコードを書いたってことはありそうだな。 おれもどっかで読んだ記憶があるよ わざと難解になっていたって web上の記事だったはずだけど だからちょっと待っとけっての! だだし今更見つけられるかどうかはわかんねーぞ ごめん見つけられん >>429 の書き込み以前にどっかで読んだ気がするんだけど もしかしたらこういう書き込みとかスラドの米とかで自分の記憶を捏造してるかもと自信なくなってきた いくらストールマンがデブで長髪でキモくて ステレオタイプのオタクをそのまま体現している 容貌をしているからと言って 嘘は良くない たしかにアメリカが京都に原爆落とすのをためらったのは 文化財があるからっていうのがどうやら噂レベルだったと 否定されたっていう話があったんだけどやっぱり噂じゃなくて 本当だったと最近NHKでやってた >>512 長崎のキリスト教徒大虐殺とかどう思ってやったんだろうね>>トルーマンとF.D.R >>511 おっと!ストールマンの容姿についてはそこまでだ!! 参考Wikipedia ttps://ja.wikipedia.org/wiki/リチャード・ストールマン#/media/File:Richard_Stallman_at_Pittsburgh_University.jpg >>513 の記事自体は初めて読んだけど、 「GCCディベロパの一人のコメント」的に紹介されてたような記憶なんよね それこそ、その辺のライセンスポリシーとかllvmの台頭とかの話題の時にどっかの記事で スラドに匿名だけどコメント( ttp://srad.jp/comment/2648971 )があったりもするし >>429 や>>500 が何から情報を得たのかはわからないけど、 なんかどっかで作られたデマの類に乗ってしまったのかもしれんです >>516 ストールマンの身長って140〜150くらいだよね >>483 「GCCチームは11月15日(米国時間)に実施したコミットにおいて、 GNU Compiler For Javaへの参照を削除。 2017年に登場が予定されている次期GCCにはGNU Compiler For Javaが含まれない」 GCCからJava削除 | マイナビニュース< http://news.mynavi.jp/news/2016/11/17/253/ 2016/11/17 Javaはどんどん新しくなるから いちいち新仕様実装していられないもんな ましてネイティブコード吐かなきゃならんとなるともう無理でしょうし 今更聞くのもアホだが、gavaってc++並に速かったの? GNU javaのパフォーマンスは悪くて10年以上前にSUN javaより遅いと言われてた 仕様追従も性能改善も出来なくて需要も無いだろうから切り捨ては仕方ないね >>520 GCJだろ GNU Compiler for Javaの頭文字 gcjはそれなりに速かった http://www.stefankrause.net/wp/?p=6 当時はJDKがまだopenじゃなかったから 自前でクラスライブラリ(GNU classpath)構築してたけど これの品質と実装範囲が弱点だった 今やJava使う人は豊富なjarに依存してるから ソースありきのgcj復活はないだろう ある関数をobsoleteにしたいとき コンパイル時にその関数を使ってたら なんかメッセージ出すようにしたいんだけど こういうのってgccだとどうやるんだっけか >>527 typedef int T1 __attribute__ ((deprecated)); 自己解決 プロトタイプ宣言とかに __attribute__((deprecated)) をくっつけたら warningで出てくれるようになった だいぶ便利になったゾこれ __attribute__(cleanup) をC言語標準に入れてください ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ >>535 プライマリーバランスの黒字化政策を撤廃するほうが先ですよ 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 DH2HQ >>537 もはや検索結果に出なくされてるのに気がついていない? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる