トップページ⇒tech
1001コメント281KB

GCCについて part8

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2007/10/13(土) 00:07:39
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家のGCCページ
http://gcc.gnu.org/

Binutils - Collection of binary utilities ←これも必要だぞ。
http://www.gnu.org/directory/GNU/binutils.html

GNU Binutils
http://sources.redhat.com/binutils/

GCC online documentation
http://gcc.gnu.org/onlinedocs/

Installing GCC
http://gcc.gnu.org/install/

GCC Timeline
http://gcc.gnu.org/releases.html#timeline

Calendar
http://gcc.gnu.org/develop.html#timeline

前スレ
GCCについて part7
http://pc11.2ch.net/test/read.cgi/tech/1145357824/l50
0809デフォルトの名無しさん2009/04/14(火) 15:51:50
>>808
マルチうざい
0810デフォルトの名無しさん2009/04/14(火) 20:06:04
>>795
それなんてAda
0811デフォルトの名無しさん2009/04/14(火) 20:06:45
>>810
誤:795
正:>>794
0812デフォルトの名無しさん2009/04/14(火) 22:31:31
>>808
その程度も出来ないのかw
プログラミングの力じゃなくて高校生1〜2年程度の数学の力だろ。

その上マルチなのか。wwwwww
0813デフォルトの名無しさん2009/04/15(水) 00:17:18
>>765
いまさらだけど、

 gcc -ffunction-sections -fdata-sections ...
 ld --gc-sections ...

で未使用関数・変数の分は削れるのかな?
0814デフォルトの名無しさん2009/04/15(水) 06:38:56
>>812
平面の問題なら中学生じゃないかな。高校生でできなかったら恥ずかしすぎる。
0815デフォルトの名無しさん2009/04/15(水) 06:46:54
できるできないじゃなくて、メンドクサイからIT奴隷にやらせようとしてんだよ馬鹿
0816デフォルトの名無しさん2009/04/15(水) 15:56:10
たかが三角形の面積がメンドクサイとは……よほど脳味噌に不自由してるんだな
0817デフォルトの名無しさん2009/04/15(水) 17:28:13
>>815
はやくおちんちんがむけるとイイネ!
0818デフォルトの名無しさん2009/04/17(金) 00:27:35
またそういうことを
0819デフォルトの名無しさん2009/04/18(土) 11:10:56
Aという静的ライブラリをリンクしているBという実行ファイルから
Cという動的ライブラリの関数をコールしてその中からAの関数をコールしようとすると
コールできる関数とUndefined symbolになる関数ができるんですけどどうしてですか?
08208192009/04/18(土) 12:15:33
試行錯誤してると、Cからコールする前にBで先にコールしておくと
CでもUndefined symbolにならないようです
最適化関係のバグですかね…
ちなみに、↓です
gcc version 3.4.6 [FreeBSD] 20060305
0821デフォルトの名無しさん2009/04/18(土) 12:57:10
Aの関数をどういう形でCから呼び出してるの?
ポインタ渡してコールバックさせてるなら不具合っぽいけど、Bで呼び出しもポインタの取得もしていないならその関数をリンクしないのは最適化としては自然でしょ。
0822デフォルトの名無しさん2009/04/18(土) 13:20:54
見つからなければ探しに行ってくれてもいいとは思うけど、
動的ライブラリも独立したプログラムだからこれが自然なのかな
CにもAを静的リンクさせるとか無駄でやりたくないんですけど…
0823デフォルトの名無しさん2009/04/18(土) 14:47:34
(静的リンク)+(ダイナミックリンク)じゃなくて
(静的リンク|ダイナミックリンク)+(実行時ロード)での話なら
ロード時にシンボルの解決範囲がオプション指定できるからそれかも?

0824デフォルトの名無しさん2009/04/18(土) 16:04:02
RTLD_NOWを指定すると、ロード時にUndefined symbolになりますた

A.a内にfunc()
B.out内にmain()
C.so内にhoge()
という関数があって、B.outがA.aを静的にリンクしている状態で、
B.outがC.soを実行時ロードしてhoge()をコールして、
hoge()からfunc()をコールしようとしています
0825デフォルトの名無しさん2009/04/18(土) 16:55:06
自前でアドレス解決しないとダメなんじゃないの?
0826デフォルトの名無しさん2009/04/18(土) 19:00:41
いやそれはないだろ。
その設計は普通のモジュール構成だし。本体側が提供するAPIを
自由にコールできないなんて聞いたことない。なんだろ?
0827デフォルトの名無しさん2009/04/18(土) 19:52:56
あ、gcc -rdynamic / ld --export-dynamic してみ?
0828デフォルトの名無しさん2009/04/18(土) 20:12:16
>>826
本体側が(正しく)提供してないからだろう。
そのタイミングで名前をリンカが知っていることが保証されていないと。
0829819(=820=822=824)2009/04/18(土) 21:00:21
>>827
gcc -Wl,--export-dynamic
という形ですけど、それは指定してるんですよ

>>820で「Cからコールする前にBで先にコールしておくと」と
書きましたが、実際にはBでのコールは実行される必要はなく、B内で
使用しないダミーの関数を作って、その中に func() を書いておきさえすれば、
C.so内のhoge()からA.a内のfunc()をコールできます
0830sage2009/04/18(土) 21:22:41
…と書いたあとに原因が分かりました
A.aをリンクしたつもりでも、A.a内のfunc()はB.outにリンクされていませんでした
これはコンパイラはfunc()の使用を知るすべがないので、やむを得ないですね
0831デフォルトの名無しさん2009/04/18(土) 21:27:25
あ、わかった。

 -Wl,--whole-archive libA.a -Wl,--no-whole-archive ... -ldl

で指定した静的ライブラリのオブジェクトをオブジェクト中シンボルを
実行ファイル側で使っているかどうかに関わらず無条件取り込みできるよ。
08328192009/04/18(土) 21:36:46
>>831
確認しました
B.outがでかくなりましたけど、コールできました
皆さんありがとうございました
0833デフォルトの名無しさん2009/04/18(土) 23:34:44
既に解決しているようだけど…

>>819には実行環境が書いてないけどld.soでしょ。
ld.soのマニュアルも読んでおいた方がいいかと。
GOTやPLTについて。

0834デフォルトの名無しさん2009/04/20(月) 18:46:23
ちょいと質問なんですが、iccの-pc64に相当するオプションってgccにはないんでしょうか。
どうにも計算結果が微妙なんで調整してみたいんですが。
0835デフォルトの名無しさん2009/04/20(月) 23:50:55
-ffloat-storeじゃなかったっけ?
0836デフォルトの名無しさん2009/04/21(火) 09:53:19
>>835
情報THX。
色色試行錯誤した結果、今回は-f(no-)float-storeは関係なく、
-msse2 -mfpmath=sseでicc -pc64と(計算結果が)ほぼ一致しました。
うーん、やっぱりアセンブリ出力を比較しないとダメなんだろうか……
0837デフォルトの名無しさん2009/04/23(木) 00:58:42
GCC 4.4.0 release age
http://www.gnu.org/software/gcc/gcc-4.4/
0838デフォルトの名無しさん2009/04/23(木) 03:06:13
そんなことより新しいコンパイラ作ろうぜ
http://lkml.org/lkml/2009/4/22/78
0839デフォルトの名無しさん2009/04/23(木) 06:13:53
>>838
ブラクラはんな死ね
0840デフォルトの名無しさん2009/04/23(木) 07:11:25
839=815=知能障害者
0841デフォルトの名無しさん2009/04/23(木) 17:00:10
じゃぁまずは新しいアセンブラを・・・おっとその前に新しいCPUをだな
0842デフォルトの名無しさん2009/04/24(金) 00:06:49
4.4.0って何が目玉なの?
0843デフォルトの名無しさん2009/04/24(金) 00:13:20
そろそろ安心して使えるようになる。
0844デフォルトの名無しさん2009/04/24(金) 00:14:43
4.4.0安定したが性能が2割遅くなった
0845デフォルトの名無しさん2009/04/24(金) 01:40:02
C++0x の先取りが面白そうかな。
0846デフォルトの名無しさん2009/04/24(金) 10:32:00
GCC4系も、MinGWが採用してくれない限り信頼して使えないんだけど。。。
0847デフォルトの名無しさん2009/04/24(金) 17:44:35
>>844
>性能が2割遅くなった
コンパイル速度?
それとも産物の動作速度?
0848デフォルトの名無しさん2009/04/24(金) 23:42:53
生成物の性能はちょっとあがったんじゃなかったかな。
もちろんiccには負ける、というブログ記事は見た。

でも、今回のリリースは自動並列化フレームワークの仕込みが目玉でしょう。
まだgcc -ipoできる日は来るのかな?
0849デフォルトの名無しさん2009/04/25(土) 00:37:00
>>848
自動並列化は使い物にならないよおもちゃレベルでしかない
IntelのThredBuildingで並列化したほうが性能いいし

0850デフォルトの名無しさん2009/04/25(土) 22:10:39
x86のインラインアセンブラを移植したいのですが
intel構文から、AT&T構文の拡張インラインアセンブラ構文に
書き換えするサンプルが見つからなくて困っています。

.asmを.sに書き換えるサンプルはいくつか見つかったのですが・・・

Darwinのgccは-MASM=intelが使えない・・・orz。
0851デフォルトの名無しさん2009/04/25(土) 23:34:23
>>850
しってるけど土曜日だから教えないw
うひひひ
0852デフォルトの名無しさん2009/04/25(土) 23:59:53
MinGWのGCCって今バージョン何?
0853デフォルトの名無しさん2009/04/26(日) 00:00:40
>>852
3.4.5
0854デフォルトの名無しさん2009/04/26(日) 00:18:47
>>853
ほー。
0855デフォルトの名無しさん2009/04/26(日) 00:33:31
DJGPP は4系列なんだけどなぁ。
Windows だと難しいポイントとかあるのかね。
むしろ要求される品質レベルの方が違うのかな?
0856デフォルトの名無しさん2009/04/26(日) 01:07:38
mingw は"2級市民"だから。公式には旧式のやつでいいってこと。

個人で4.3系列配ってるひとはいるにはいる
0857デフォルトの名無しさん2009/04/26(日) 02:32:19
mingwはやる気ないだけだろ。
3系だって3.4.6にしないし。
0858デフォルトの名無しさん2009/04/27(月) 01:11:32
公式でも 4.3.0 は testing として配ってるじゃん. 1年以上更新されてないけど、それは 3.4 も同じw
0859デフォルトの名無しさん2009/04/27(月) 08:00:40
>>851
平日になりましたので回答を頂けると幸いです。
0860デフォルトの名無しさん2009/04/27(月) 09:58:21
裏は必ずしも真でないわけで…
0861デフォルトの名無しさん2009/04/27(月) 10:41:51
というか休日の間に調べとけと。
構文の説明なんぞいくらでも出てくるし、
あとはGCC x86の●ーリング●ンベンションをだな

(ヒント:●には同じ文字が入る)
0862デフォルトの名無しさん2009/04/27(月) 11:17:22
ボーリングボンベンション
0863デフォルトの名無しさん2009/04/27(月) 11:18:56
カーリングカンベンション
0864デフォルトの名無しさん2009/04/27(月) 11:19:05
ローリングロンベンション
0865デフォルトの名無しさん2009/04/27(月) 11:23:50
ションベン・プロレスリング
0866デフォルトの名無しさん2009/04/27(月) 15:21:45
> コーリングコンベンション の検索結果 約 2,530 件中 1 - 10 件目 (0.35 秒)
0867デフォルトの名無しさん2009/04/29(水) 08:18:19
atom向け最適化はいつ入りますか?4.5?
0868デフォルトの名無しさん2009/04/29(水) 12:31:37
AMDが出しているOpen X86コンパイラとかいう
gccの改悪版あれすげー遅いな

AMD何がしたいんだ?
0869デフォルトの名無しさん2009/04/29(水) 20:44:12
CPUベンダとしてコンパイラくらいつくらにゃならんってことだろ
0870デフォルトの名無しさん2009/05/01(金) 09:51:02
>>867
もう入ってる
0871デフォルトの名無しさん2009/05/08(金) 20:09:38
gcc 4.4.0がリリースされたというので、
ビルドしてインストール(usr/local/)してみたんですが、
アンインストールしたいのですが、
/usr/local/には他にgccは入れていないのですが、
/usr/local/にあるgcc4.4入れた時にできたディレクトリを削除すればOKですか?
他に削除するところはありますか?
0872デフォルトの名無しさん2009/05/08(金) 22:25:50
ですが、
ですが、
ですが、
0873デフォルトの名無しさん2009/05/08(金) 22:34:58
>>871
そうだよ。でも/usr/local配下のbin/ include/ info/ lib/ libexec/ man/ share/には全部関連するものが
入ってると思うよ。
0874デフォルトの名無しさん2009/05/10(日) 18:41:18
gccについてというわけではないですが、詳しい人がいそうなのでここで質問します。
C言語の opaque の利用方法についてです。
-- hoge.c --
struct hoge{
int a;
double b;
} __hoge[] = {
{1,2.0},
...
};
--------------
-- hoge.h --
typedef struct hoge hoge;
extern struct hoge __hoge[];
------------
としてやりたいのですが、
上の __hoge[] が error: array type has incomplete element type
こんなことをいわれてしまい、うまくコンパイルできません。
シンボルさえ解決できれば問題なさそうなのですが、
うまく通す方法ご存知の方おしえていただけないでしょうか?
バージョン gcc4.0.1 です。 よろしくおねがいします。
0875デフォルトの名無しさん2009/05/10(日) 18:51:38
>>874
hogeの定義もヘッダに書け。
あとそれくらいCのスレで聞けばいい。
0876デフォルトの名無しさん2009/05/10(日) 19:00:01
うーん、「opaque」なので定義をかいたら意味がないかと .....
Cのスレさがしたのですが、なかなか答えがきけそうなところが見つからなかったのでした。
ただ、スレ違いすぎる気がするので、別のところにクロスポストしてみます。
0877デフォルトの名無しさん2009/05/10(日) 19:14:14
ああ、理解しました。通るわけないか .... ありがとうございました。
0878デフォルトの名無しさん2009/05/10(日) 19:14:19
質問です。
Cygwin+GCCでどうしてもUTF-8を扱いたいので

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int main(void){
setlocale(LC_ALL, "Japanese_Japan.932");
wchar_t str[]=L"あいうえお";
wprintf("%lc", str[0]);
return 0;
}


のようなコードを書きました。
”あ”と言う文字を表示したいのですが、
wchar.hをインクルードしてるにもかかわらず、wprintfやsetlocaleが無いとコンパイラに言われます。
何をインクルードすればいいのでしょうか?ググってもwprintfに必要なヘッダはwchar.hとしかかかれてませんでした。

ちなみに、GCCのバージョンは3.4.4です。
よろしくお願いします。
0879デフォルトの名無しさん2009/05/10(日) 19:16:22
配列というのは中身がわからないと作れない。

だから、そういうことはできない。

(配列はポインタではない)
0880デフォルトの名無しさん2009/05/10(日) 19:19:19
解決してたorz

>>878
コンパイラが、ヘッダファイルがみつからないので読み込めなかったとか
エラー吐いてないかね?

でなければ wprintf をヘッダファイルが入ってるディレクトリで grep してみれ。

それでもダメなら、なんか #define が必要とかかなぁ。
0881デフォルトの名無しさん2009/05/10(日) 19:23:54
>>879
ありがとございます。
>> 配列というのは中身がわからないと作れない。
自分の理解では、構造体の定義情報がないとサイズが計算できないためいくらがんばっても
(配列や1つのインスタンス)であっても計算できず IA32 or IA64 のような
アドレスポインタならばとりあえず参照くらいはできるはずだぜー
っとう感じなのかなと思います。
0882デフォルトの名無しさん2009/05/10(日) 19:25:15
それはそうと、予約識別子しね。
0883デフォルトの名無しさん2009/05/10(日) 19:54:27
>>878
#include <locale.h> も必要じゃね?

それからソースコード中のワイド文字列リテラルの文字コードを
どう解釈するかは処理系依存だったはず。
gcc の場合は -finput-charset オプションで指定できる。
出力する文字コードの指定は -fwide-exec-charset オプション。

やりたいことがよくわからんが、
「あ」という文字を UTF-8 で出力したいってことなのか?
0884デフォルトの名無しさん2009/05/10(日) 20:09:27
>878
Cygwin 1.5 ならあきらめろ。wchar 系関数は無効にされてる。
Cygwin 1.7 では wchar 実装中だったからもう少し動くようになってるかもしれない。

>setlocale(LC_ALL, "Japanese_Japan.932");
これってどこかから引っ張ってきたコード?
どうせ設定するなら "ja_JP.UTF-8" じゃないの?

で、そもそも論だが UTF-8 使うのに wchar 系の関数が必要か?
入出力は UTF-8 で内部では wchar_t で持つつもりなの?
08858782009/05/10(日) 20:23:26
なるほど・・・
Cygwin側の問題でしたか。
あ、localeに関してはlocale.hのインクルードで解決しました。


やりたい事は、1バイト単位ではなく、ユニコード単位で文字列操作を行って
結果を表示したいと言う事です。
なので、内部でcharで持ってしまうと都合が悪いのです。
0886デフォルトの名無しさん2009/05/10(日) 20:33:22
>>884
それはおそらくVCの書き方。
だから、たぶんMinGWでいける。
当然、Cygwinでも-mno-cygwinなら使えるのだと思う。
0887デフォルトの名無しさん2009/05/10(日) 20:56:52
>>885
それなら内部エンコーディングはUTF-32で保持する必要あるんじゃないの。
0888デフォルトの名無しさん2009/05/10(日) 22:00:54
>>885
Unicode だったら UTF-8 以外でもいいのか?
シーケンシャルな操作しかしないなら UTF-8 は扱いやすい符号だけど…。
「やりたいこと」ってのが >>878 から何も具体的になってない。
説明不足。
0889デフォルトの名無しさん2009/05/10(日) 22:07:24
質問の意図がwprintf()を使うにはどうすれば?
って話なんだから十分だろ。何使おうがどう処理しようが知ったこっちゃねぇ

んで、その答えは
-mno-cygwinを付ける。
ただしGCC-4は対応してません。
0890デフォルトの名無しさん2009/05/11(月) 03:48:24
GCCでwchar_tは激しく欠陥品だから使わない方がいいぞ。
例えば

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main(void){
char str[]="あいうえお";
wchar_t w_str[512];
setlocale(LC_ALL,"ja");

int len=mbstowcs(w_str,str,512);
wprintf(L"%s", &w_str[2]);
return 0;
}

このコードは普通なら、3番目の文字から表示する事を期待するが
実際には、
いうえお
と表示される。これでは何の為にワイド文字に変換したのかw
同じコードは、VC++だと正常に表示される。
悪い事は言わん。お前の知識だとハマるだけだから、素直に回避しとけ。
0891デフォルトの名無しさん2009/05/11(月) 03:55:59
所詮毛唐の使う7bitコードさえちゃんと動けばいいって事か
ソ系ダメ文字も相変わらずだし
0892デフォルトの名無しさん2009/05/11(月) 04:06:43
ダメ文字()笑

それはオプション正しく設定してないだけだろ
0893デフォルトの名無しさん2009/05/11(月) 07:48:21
>>890
cygwinのライブラリがウンコなだけでgccのせいじゃない
0894デフォルトの名無しさん2009/05/11(月) 16:49:14
今のCygwinのwcharなんて使おうと思うほうが間違い。

MLにfujiedaさんがCygwinのI18Nに手をつけるとか投げていたけど、
なしのつぶてだな…
0895デフォルトの名無しさん2009/05/11(月) 17:37:05
もう飽きたんでしょう。
0896デフォルトの名無しさん2009/05/11(月) 19:33:31
>>892
MinGW3.4.5のインストーラで入れた版はダメでした
手で一つ古いcc1.exeとcc1plus.exeを入れたらうまく行きました
ありがとうございました
0897デフォルトの名無しさん2009/05/11(月) 22:43:13
公式の Mingw 3.4.5 バイナリって iconv リンクしてなくね?
0898デフォルトの名無しさん2009/05/11(月) 23:14:35
>>897
前のバージョンならリンクしてるからインストーラを使ったのなら
sourceforgeへ行って落とせ

ここが参考になる

http://seclan.dll.jp/dtdiary/2009/dt20090324.htm
0899デフォルトの名無しさん2009/05/12(火) 00:27:03
>>898
いや、俺はもう解決してるんだけど、
公式なものでなんでこんなことになってんのかな…と
0900デフォルトの名無しさん2009/05/12(火) 00:29:52
所詮8ビット圏の連中は軽視されていると思われる
0901デフォルトの名無しさん2009/05/12(火) 00:48:53
軽視というか、こっちから
声出したり手出さないといけないんだろうな。
と思いつつ何もしていないけど。すまん。
0902デフォルトの名無しさん2009/05/12(火) 15:21:55
ヨーロッパの大半も8bit圏なんだが。
0903デフォルトの名無しさん2009/05/12(火) 15:42:32
もう GCC は巨大すぎだ
経緯とか理屈とかさっぱりわからんし、
英語の文書を追う気にもならん。
0904デフォルトの名無しさん2009/05/12(火) 16:15:39
C++の場合は、gccにlibstdc++が入っているけど、
Cの場合は、gccにはlibcが入ってなくて、
libcの実装はプラットフォーム毎に違うから、
gccの問題じゃないよ。スレ違い。

char str[]="あいうえお";

このmbcs部分のエンコードがおかしいってのなら
gccの問題に他ならないんだけど。
0905デフォルトの名無しさん2009/05/16(土) 07:17:20
x86でのlong longの演算がどうコンパイルされているのか理解しようとしてるのですが
この部分が解りません。

%ebxにはある8バイト整数の上位4バイトが入っているところで
sar $0x1f,%ebx
sar $0x1f,%ebx

と、右に31ビットシフトを二回やってます。 SARの定義によると、%ebxが
もし負であったら結果は%ebxが 0xffffffffになって31ビット目がキャリーに。
正であったら0x00000000になってやはり31ビット目がキャリーに。 

これの意図もまだ解らないのですが、2番目のSARにどういう意味があるのか全く
検討が着きません。始まる段階で%ebxはすでに2つの値でしかあり得ないのに
なぜまた31ビットもシフトしてるのでしょうか? 
0906デフォルトの名無しさん2009/05/16(土) 10:26:28
キャリー←正負
09079052009/05/16(土) 11:18:02
>>906
正負判定をキャリーに入れる為の2つのSARであると? 

sar $0x20, %ebx ではだめなのでしょうか? 
0908デフォルトの名無しさん2009/05/16(土) 11:34:50
%ebx←0xffffffffあるいは0x00000000
レス数が900を超えています。1000を超えると表示できなくなるよ。