GCCについて part9

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
史上最強かもしれないツール、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について part8
http://pc12.2ch.net/test/read.cgi/tech/1192201659/l50
2デフォルトの名無しさん:2009/06/27(土) 23:54:04
おつ
3デフォルトの名無しさん:2009/06/28(日) 01:06:56
>>1
4デフォルトの名無しさん:2009/06/28(日) 14:46:01
  /|            
 //||             
    ||         /( (・゚))
  . |:|       //
 . | |       | |                  |
  | |        |. |                 .||
  | |      / |     , _____    .||
  | |      /  |     / ____  /   .||
  | |      /.   |   / /    / /     |:|
  | ||     | -‐-|   / /    / /      | | 
  | ||\   /   /   / /    | |____/ .|
  | :| \ \/    |   / /     \.______/
  | |  \      ゝノ /
  | |  /)       /
 . .|| / /       |
   | (_/       \
     /   /⌒\  \
    (___/    \__)
5デフォルトの名無しさん:2009/06/28(日) 14:51:27
>>4
ミギーか。
懐かしい。

6デフォルトの名無しさん:2009/06/28(日) 14:54:59
    ._
     \            、・、                  .,
  .  . .`、            、`・、        .       .,
     .   \             .`・x、            .,       .‐ヤTTTTTTTTTTTTTT_ニ‐!
    .    .\              、`ー、_   .   .   .i                  _.‐“゜
          \               、`・、        }               _.‐“´
            ヘ_    .    .   .   ./    .   .i      .      、、・゛
           ._.^   .   .   .   ._.″    .   、}   .   .  .  ._.^             、
        ゙_.・´   .   .   .  ._.・′         、i       .    ノ゜              ゙’
   .  ._.・^    .    .   ._、‐?´    .    .    .′        ゙/`               、1
 . . ..ヤ´      .      、・^`                         .(_                 ,
                .               .               .`¨“〜-=.、_        ._.
                                     .                  `¨“?〜---・^`
7デフォルトの名無しさん:2009/06/29(月) 13:17:44
空気読まずに質問です。
ググってみたが解決策が見つからないです。ヒントをください。

const short x_limit_min[8] = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7};
__asm__ volatile (
 :
" movdqu %[x_limit_min], %%xmm3 ¥n¥t"
 :
:: ..., [x_limit_min] "m" (x_limit_min), ...
: ... );

こう書いてみたところ、(Xは数字)
error: memory input X is not directly addressable
と警告されてしまう。
ローカル配列のアドレスを渡すだけなので
:: [x_limit_min] "m" (&x_limit_min)
としてみても、同じエラーだった。どうするのが正解でしょう?
8デフォルトの名無しさん:2009/06/29(月) 13:57:07
>>7
x_limit_minのポインタをレジスタに入れて間接アドレッシングで書いてみたら?
9デフォルトの名無しさん:2009/06/30(火) 04:44:30
Mac OS Xのgccってgccのホームページからソースをダウンロードしてコンパイルして
置き換えてしまっても大丈夫なのでしょうか?
10デフォルトの名無しさん:2009/06/30(火) 05:15:54
age質問でマカー。
おまけにスレ違い。最悪だよな。
11デフォルトの名無しさん:2009/06/30(火) 10:23:33
スルーできないのがドザ
12デフォルトの名無しさん:2009/06/30(火) 11:50:01
>>9
マジレスすると、No。

MacOS Xについているgccは、Apple Extensionがいくつか
入っている。だから、置き換えるんじゃなくて別のパスに
バイナリを置いて、環境変数CCとかにフルパスを埋め込んで
きりかえる。例えば、/opt/local/bin/とか/usr/local/bin/とか。

Xcodeがデフォルトでgcc4.0.1と4.2.1、llvm-gccを入れるけど、
MacPortからすっぴんgccをバージョン指定で落としてきて入れるっ
てのが可能らしい。試したことは無いけど。
13デフォルトの名無しさん:2009/06/30(火) 20:29:22
マカーウゼー
147:2009/06/30(火) 20:32:48
>13
まあまあ。Appleのllvmとかclangへの貢献度は高いと思うし。

>8
解決しました。vectorを使ってあげればそのまま行けました。こんな感じです。
v8hi x_limit_min = {i, i-1, i-2, i-3, i-4, i-5, i-6, i-7};

15デフォルトの名無しさん:2009/06/30(火) 20:50:48
>>9
>>12が言ってるが、フレームワークをリンクしたりするなら止めたほうがいい。
binutils相当がかなり違うし、GCC自体も独自拡張の部分が多いから。
gccのmanページで"APPLE ONLY"を検索してみると違いがよく分かる。
16デフォルトの名無しさん:2009/06/30(火) 21:21:30
ドザよりよっぽどgccに近いところにいると思うんだ。

mac使ったことないけど。
17デフォルトの名無しさん:2009/07/01(水) 03:07:10
それは無い。
次の無かったNeXTならともかくw

結局、Solarisに成る前のSUNが一番良かったな。
18デフォルトの名無しさん:2009/07/01(水) 05:15:07
AppleがFSFに協賛してるなんて初耳だ。
Mac OSってGPLなの?
コンパイラ作る技術が無いから利用してるだけでしょ。
197:2009/07/01(水) 05:39:33
>>18
んなこたあない。

http://arstechnica.com/apple/news/2007/03/apple-putting-llvm-to-good-use.ars

OpenCL、CUPS、WebKitとか、それなりにOpenSourceな世界にも貢献
してる。パッチも投げてるし、別におかしくないかと。
20デフォルトの名無しさん:2009/07/01(水) 06:29:24
>>19
いや、結構オープンソース嫌いなイメージがあるのだが。
当てつけのように暗号化したりして邪魔してるじゃん。
21デフォルトの名無しさん:2009/07/01(水) 07:27:00
>>18
http://www.opensource.apple.com/

技術がどうとかよりNeXT時代からGCCベースだし、ObjC/ObjC++サポート以外
にもGCCに様々な貢献をしていると思うが。
変な独自コンパイラを作られるよりGCCの方がずっと良いと思う。
227:2009/07/01(水) 08:29:40
>>20

「当てつけのように暗号化」の話は はつみみです。
そーすよろ。
23デフォルトの名無しさん:2009/07/01(水) 08:39:12
OS Xはしばらくの間ソース公開してたよな。
24デフォルトの名無しさん:2009/07/01(水) 13:17:34
>>19
自分とこでも動くようにパッチ投げてるだけで、最初のソース本体を
GPLで公開してない。それどころか自社独自ハードのデバドラは
ソース非公開だし。そこに挙がってるような上っ面のソフトなんて、
別にソース公開してくれなくても、見た目が似たようなのは幾らでも
作れる。必要なのはハードウェアのデバドラをOSS化すること。

そもそもOS X 自体を再コンパイル出来ないし。

>>21
GCCは利用するが、貢献はしてない。むしろあからさまにGPLを
成果物から避けてる。Takeはするけど、Giveはしない。

>>22
voidウザい。
25デフォルトの名無しさん:2009/07/01(水) 13:24:24
Apple Public Source Licenseとか、CDDLなSunやMS-PLなMicrosoftと同じ穴の狢。
26デフォルトの名無しさん:2009/07/01(水) 13:28:24
>>24 がうわっつらだけしか見てない奴ということはよくわかった。
27デフォルトの名無しさん:2009/07/01(水) 13:38:07
最近のアップルの独自ハードなんてiPhone/iPodTouchのARM SoCくらいで後は汎用部品ばかりじゃないか
28デフォルトの名無しさん:2009/07/01(水) 13:39:14
見てないではなく、>>24は「何も知らない」が適当だな

GCCへの貢献が無いだとか、嘘もいいところだ
29デフォルトの名無しさん:2009/07/01(水) 16:19:51
上に貼られているリンクみればDarwinのコード落とせるのにね。
30デフォルトの名無しさん:2009/07/01(水) 16:22:56
カーネル部分だけでなくお望みの各種デバイスドライバのソースも
置いてあるのにな
31デフォルトの名無しさん:2009/07/01(水) 19:29:49
米IBMらがオープンソースマシン学習コンパイラを発表――開発時間を短縮
http://sourceforge.jp/magazine/09/07/01/0714255
>GCCをインタラクティブなマシン学習対応研究ツールに変換する「Milepost Framework」を利用、それぞれの設定に応じてコンパイラを開発することなく、自動的に最適化するコンパイラを生成する。
>ターゲットアーキテクチャ向けにアプリケーションを迅速にチューニングするため、再設定して構築するシステムの開発期間を短縮できるという。
>「IBM System p」で行った組み込みアプリケーションのベンチマークテストでは、性能が平均18%改善されたという。

まーたこの人誤訳してそうだなぁ…。
32デフォルトの名無しさん:2009/07/01(水) 20:38:00
「機械学習」で成語だよなぁ
33デフォルトの名無しさん:2009/07/01(水) 20:41:26
>>24
>Takeはするけど、Giveはしない。

Give を強要するのがオープンソースじゃないでしょ。
それに、Apple 由来のソースコードは沢山見掛けるよ。

俺は意識的に GPL 物を避けてるけど、ライセンスの選択は
プログラマの自由だから他人にとやかく言われたくないし。
34デフォルトの名無しさん:2009/07/01(水) 21:44:00
マカーってDarwinを免罪符にしてるけど、DarwinはMac OS Xじゃないんだけどね。
貢献しているっていうなら、Darwinじゃなく、Mac OS XをGPLで配布すればいいじゃん。
MSもアップルもSUNも同じ穴の狢で、ただの独占を狙ってる企業って事実を認識しろよ。
35デフォルトの名無しさん:2009/07/01(水) 21:55:35
クレクレ君乙。
穴の見分けもつかない奴が同じ穴の狢とか言ってんなよw

CDDL は『GPL がコンフリクトを起こしている』だけで、
オープンソースライセンスとしては何の問題も無いぞ。
現に BSDL な環境に持って行っても問題は出ていないし。
36デフォルトの名無しさん:2009/07/01(水) 22:16:50
どこまで馬鹿なんだ?
「GCCに貢献してない」と言い出したのはテメーだろうが
それを論破されたからと言って無関係な事を言い出すなよ、気違いが
37デフォルトの名無しさん:2009/07/01(水) 22:23:39
>>34
もういいです。Appleとまかが死ぬほど嫌いなのは良くわかりました。
お願いですからトリップつけてください。あぼーんするから。
38デフォルトの名無しさん:2009/07/01(水) 23:14:33
その昔、MS相手にAppleがルックアンドフィールで訴訟を仕掛けたことを理由に
RMSがAppleをdisって以来の筋金入りのRMS信者かなw
39デフォルトの名無しさん:2009/07/01(水) 23:57:48
>>34
禿同!

>>36
違う違う。それ俺。

とにかくマカーが狂ってるのは分かったから>>37
トリップ付けろ。アボーンするから。<言い出しっぺの法則
40デフォルトの名無しさん:2009/07/02(木) 00:01:30
分裂したw
41デフォルトの名無しさん:2009/07/02(木) 05:22:04
貢献してねーじゃん(w
論破とか言って勝利宣言かよ。
マカー的には「アップルはgccに多大な貢献しているから多少のスレチは
我慢しろボケ」ってことかよ。意味わかんねー。
42デフォルトの名無しさん:2009/07/02(木) 06:31:18
そういえば昔 NeXT を寄贈してたのってキヤノンだっけ? NeXT 社?
43デフォルトの名無しさん:2009/07/02(木) 08:04:41
>>41
糞レスしてる暇あったらGCCのChangeLog見てみろよ
ソースも無しに貢献してないしてないとわめくなクソガキが
44デフォルトの名無しさん:2009/07/02(木) 09:13:45
そういや RMS が MIT の AI ラボを借りるときスティーブ・ジョブズが口利きしたっていう
話。 ttp://journal.mycom.co.jp/special/2004/gnu/004.html
こういう貢献もあるってことで。

>>38
この頃はジョブズは NeXT で Apple に居なかったのでルック&フィール訴訟は関係なく、
現在ジョブズ信者である分には RMS 信者と対立しないとかw
45デフォルトの名無しさん:2009/07/02(木) 20:15:58
>43
そのとおりですね。

パッチポストしてる人のメールアドレス見てみれば
>41とか>39とかがおばかさんなのは良くわかります。
きっと39とか41とかはchangelogもMLも見たことさえ
ないのでしょう。
46デフォルトの名無しさん:2009/07/02(木) 21:11:14
じゃあ、gccに多大な貢献をしているApple関係のすれ違いは容認ってことで。
今からAppleスレね。
gccの話もしてもいいよ。
47デフォルトの名無しさん:2009/07/02(木) 21:20:11
gccとか書いてる時点で馬鹿確定だな
48デフォルトの名無しさん:2009/07/02(木) 21:56:33
自己紹介は良いから(w
49デフォルトの名無しさん:2009/07/03(金) 13:29:28
次のようなプログラムをgcc(3.3.5, 4.4.0)でコンパイルするとハネられます。
PGIやwindows SDKのコンパイラなら問題なく通るのだけど、なにか間違ってる?

T::size_type is parsed as a non-typeとか言ってくるし。
でも、
void func(const T&) [with T=std::vector<double, std::allocator;double> >]と、Tがvector型だとわかってインスタンス化してるんですがねぇ。
当然、vector<double>::size_typeは存在するのでテンプレートとして書かなければgccでも通ります。
バグ?

#include <iostream>
#include <vector>

using namespace std;

template <class T>
inline void func(const T& a)
{
T::size_type length = a.size();
cout << length << endl;
}

int main(int argc, int argv)
{
vector<double> a(5);
func(a);

return 0;
}
50デフォルトの名無しさん:2009/07/03(金) 13:32:43
T::size_typeが一見して型名だとは解らないため (enum定数とかstatic変数かも)
typename T::size_type としてみれ
51デフォルトの名無しさん:2009/07/03(金) 13:32:58
>>49
http://gcc.gnu.org/gcc-3.4/changes.html#cplusplus
> You must now use the typename and template keywords to disambiguate dependent names, ...
52デフォルトの名無しさん:2009/07/03(金) 13:54:30
さんくす
lengthの定義のところにtypenameを入れたら通りました。
C++って元からそんな仕様だったっけ?
まあ通ったからいいや。
53デフォルトの名無しさん:2009/07/03(金) 23:20:26
そういう仕様です。
54デフォルトの名無しさん:2009/07/03(金) 23:36:16
環境→OS:Fedora11 gccのバージョン:gcc 4.4.0

GEANT4というシュミレーションコードのコンパイルがうまくいかず、困っています。
3ヶ所ほどコンパイル中にエラーが出ていて、2つは潰したのですが…
最後に残った

Compiling G4ScoreLogColorMap.cc ...
src/G4ScoreLogColorMap.cc: In member function 'virtual void G4ScoreLogColorMap::DrawColorChartText(G4int)':
src/G4ScoreLogColorMap.cc:157: error: 'sprintf' is not a member of 'std'
gmake[2]: *** [/home/xxxxxxxxxxxxx/geant4/tmp/Linux-g++/G4detutils/G4ScoreLogColorMap.o] エラー 1

というエラーが取り除けなくて困っています。
読み込んでいるヘッダーがおかしいんだろうなぁとは思うのですが…
ネットで調べて、色々読み込んでみました。
(1) ttp://www.drk7.jp/MT/archives/001498.html
ここを参考に…(ここはatoiが読み込めませんと出ていた。)
#include <cstdlib>
#include <cstring>
(2) ttp://code.google.com/p/pyminuit/issues/detail?id=8
を参考にして…
#include <algorithm>
(3) ttp://simd.jugem.jp/?eid=73
を参考にして、また、c++がcを下位互換でサポートしている事を踏まえて
#include <stdio.h>

これだけ加えてみましたが、同じエラーが続いています。
どのヘッダーに含まれているのか、ご存知の方いらっしゃいましたら、ご教示いただけませんか?
宜しくお願いいたします。
55デフォルトの名無しさん:2009/07/03(金) 23:45:05
<cstdio>
5654:2009/07/03(金) 23:47:06
>>55
本当にありがとうございます!解決しました!
57デフォルトの名無しさん:2009/07/16(木) 06:54:06
標準のINCLUDE PATHは変えられないのですか?

自分のHOMEにライブラリをインストールしたのですが、コンパイル時には
システムに標準で入っている古いライブラリのヘッダを観に行ってしまって
失敗するようです。
/usr/localを見ないようにはできませんか?
58デフォルトの名無しさん:2009/07/16(木) 09:52:14
>>57
-I-
59デフォルトの名無しさん:2009/07/16(木) 11:36:33
普通に見ない
60デフォルトの名無しさん:2009/07/16(木) 15:01:16
-isystem
61デフォルトの名無しさん:2009/07/18(土) 03:22:21
gccのオプションで -mtune と -march の違いって何ですか?
62デフォルトの名無しさん:2009/07/18(土) 03:27:36
man gcc
63デフォルトの名無しさん:2009/07/18(土) 03:40:41
ありがとう
ググって解決しました
64デフォルトの名無しさん:2009/07/23(木) 20:30:20
4.4.1
65デフォルトの名無しさん:2009/07/24(金) 18:25:36
66デフォルトの名無しさん:2009/08/01(土) 17:02:45
gcc 4.4を使うとGPL強制されるので使っちゃダメです
67デフォルトの名無しさん:2009/08/01(土) 17:21:13
夏だなぁ
68デフォルトの名無しさん:2009/08/01(土) 19:39:47
gccがパブリックドメインになるのは50年後です
6968:2009/08/01(土) 19:52:06
間違えた、著者の死後50年だよね。
70デフォルトの名無しさん:2009/08/01(土) 20:02:18
著作権についてロクに知らない馬鹿だな。

保護期間が50年なのは財産権であって、人格権は含まれない。

パブリックドメインは人格権に相当するものも含めパブリックと解される。
71デフォルトの名無しさん:2009/08/01(土) 20:26:15
人格権は日本では相続不可。保護期間は死後0年まで。
72デフォルトの名無しさん:2009/08/01(土) 20:38:51
116条
73デフォルトの名無しさん:2009/08/04(火) 20:44:15
影響しないはずの e_X のコメントの有無で結果が変わ
る。誰か報告してくれ。

#include <stdio.h>

// gcc version 4.2.1 20070719  [FreeBSD]
// gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)

typedef enum {
  // e_X = -1,
  e_a,
} enum_t;

void
foo(enum_t e) {
  printf("e %s\n", e < 0 ? "< 0" : ">= 0");
}

int
main() {
  enum_t e = -1;
  foo(e);
  return 0;
}
74デフォルトの名無しさん:2009/08/04(火) 20:56:33
> Each enumerated type shall be compatible with char, a signed integer type, or an
> unsigned integer type. The choice of type is implementation-defined,108) but shall be
> capable of representing the values of all the members of the enumeration.

意訳) enum の型は処理系定義だよ、ただしメンバの値はすべて表現できなければならない

なので、メンバに負の値がなければ、処理系によっては unsigned を選ぶかもしれない
unsigned になった場合は e = -1 は e = (unsigned) -1 のことだから、
なんというか、まぁ、仕方ないんじゃないか
75デフォルトの名無しさん:2009/08/04(火) 20:57:19
e_Xがないとeが負とならないと判断して
printf("e %s\n", e < 0 ? "< 0" : ">= 0");

printf("e %s\n", ">= 0");
に最適化されてるみたい。
76デフォルトの名無しさん:2009/08/04(火) 21:14:59
>>74
マジか…int とコンパチだと思ってたよ。
77デフォルトの名無しさん:2009/08/04(火) 21:16:17
いやでも同一の implementation で揺れるのはどうなの?(w
78デフォルトの名無しさん:2009/08/04(火) 21:26:09
コードとかの問題じゃないけど、わかる人いたら回答おね。

GCC4.4を--prefix=/opt --program-suffix=-4.4のOPTで自己ビルドインスコ。
これでいくとlibstdc++.so.6とlibgcc_s.so.1が/opt/lib64ディレクトリにできるんだけど、
問題はコンパイルしたアプリがこれらを参照しないでUbnuntu9.04のGCC4.3とセット物の/usr/lib配下の
物を参照してる。アプリをコンパイル時にLD_RUN_RATHに/opt/lib64をつけても変わらない。

ちなみに/opt/lib64/libstdc++.so.6は/opt/lib64/libstdc++.so.6.0.12へ、/usr/lib/libstdc++.so.6は
/usr/lib/libstdc++.so.6.10へのリンクだからバージョン違ってる・・

/etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが
(Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。
そうなるとよくないですよね。なのでやめました。

実行アプリ毎にLD_LIBRARY_PATHをつける管理が面倒なのでGCC4.4でコンパイルしたアプリも現状の
GCC4.3のlibstdc++とlibgcc_sを読ませておく状態で使用して何か後々問題出る可能性ありますか?
79デフォルトの名無しさん:2009/08/04(火) 21:26:54
>>73
アセンブリコード出力して比較してみろよ
80デフォルトの名無しさん:2009/08/04(火) 21:34:59
>>78
リンク時に
-Wl,-rpath,/opt/lib64
とかいう話かね?
81デフォルトの名無しさん:2009/08/04(火) 21:38:09
>>78
LD_RUN_RATH→LD_RUN_PATH
82デフォルトの名無しさん:2009/08/04(火) 21:46:19
>>77
揺れていいみたいだね。

99)An implementation may delay the choice of which integer
type until all enumeration constants have been seen.
83デフォルトの名無しさん:2009/08/04(火) 21:47:42
>>80
お、や。もしかしてそれをコンパイル時にコンパイラフラグで渡せばいいのでしょうか。
やってみます^^

>>81
すまそ、タイプミスです。
84デフォルトの名無しさん:2009/08/05(水) 00:21:35
>>78
> /etc/ld.so.confに/opt/lib64を追記すると両方共それを参照するけど、そうなるとシステム全部のアプリが
> (Ubuntuのgcc4.3でコンパイルされてる)全部gcc4.4のを読んでしまう(lddコマンドの結果)。
それほんと?埋め込まれたバージョン番号が違うから、そのへん良きに計らってくれると思ったんだけど。
85デフォルトの名無しさん:2009/08/05(水) 01:11:13
>>78
そういうもんだ。Ubuntuのg++-4.2も4.3のlibstdc++使ってるし、PPAにある
g++-4.4を入れるとlibstdc++も4.4にアップグレードされる。
86デフォルトの名無しさん:2009/08/05(水) 16:46:34
まーlibstdc++のマイナーバージョン違いは気にしなくていいんじゃね?
87デフォルトの名無しさん:2009/08/27(木) 18:58:19
-fopenmpだっけ?
あれをつけるのとつけないとで違いってでる?
88デフォルトの名無しさん:2009/08/27(木) 23:14:48
pragma omp云々
してないソースだと無意味。
89デフォルトの名無しさん:2009/09/03(木) 22:11:25
gcc4.4ってGPL3だから
Windows以外で採用不可能なんだね

90デフォルトの名無しさん:2009/09/04(金) 00:12:27
は?
91デフォルトの名無しさん:2009/09/04(金) 01:22:03
ひ?
92デフォルトの名無しさん:2009/09/04(金) 02:02:51
ふぅ…
93デフォルトの名無しさん:2009/09/04(金) 05:53:28
=3
94デフォルトの名無しさん:2009/09/04(金) 10:08:46
うほっ
95デフォルトの名無しさん:2009/09/10(木) 22:31:17
gcc 4.4.3 releaseの情報をギボンヌ
96デフォルトの名無しさん:2009/09/11(金) 09:45:57
gcc-4.4でコンパイルしたオブジェクトとgcc-4.2でコンパイルしたオブジェクトを
リンクするって出来るものなの?
97デフォルトの名無しさん:2009/09/11(金) 09:59:01
できる
98デフォルトの名無しさん:2009/09/11(金) 11:50:22
libstdc++の微妙な違いにはまったりして。
まあMajorが同じなら大丈夫か。
99デフォルトの名無しさん:2009/09/11(金) 13:38:45
>>97
ありがとうございます。やってみたら出来ました。
100デフォルトの名無しさん:2009/09/12(土) 08:47:46
別のプラットフォームのプログラムを開発することはできますか?
101デフォルトの名無しさん:2009/09/12(土) 09:14:46
GCC クロスコンパイル でぐぐれ
102デフォルトの名無しさん:2009/09/12(土) 20:19:01
使ってるレンタル鯖が C/C++ で書いた CGI を使えるって書いてあるんだけど、
シェルは解放してないからクロスコンパイル環境を作って対応したことはある。
(鯖は無料だからその程度の手間は仕方ないんだが。)
最近の GCC ならそんなに難しいことではない。
でも、ライブラリ類はコンパイル済みのをどこかからもってきた方がいいぞ。
103デフォルトの名無しさん:2009/09/12(土) 23:55:37
g++ には VC のプリコンパイル済ヘッダみたいな機能はないんですかいの?
boost 使ったソースをコンパイルしようとしたら遅すぎてやっとれんです。
104デフォルトの名無しさん:2009/09/13(日) 00:24:16
gccにもpchぐらいあるわい
105デフォルトの名無しさん:2009/09/13(日) 00:25:09
あ、ごめん、boostは知らんです…
ccacheで我慢するくらいしか思いつきません
106103:2009/09/13(日) 00:38:06
おお、あるのね。どもっす。
とりあえずあとはぐぐってみます。
107デフォルトの名無しさん:2009/09/26(土) 23:08:03
すみません質問なのですが,最近vc++からgccに乗り換えたのですが
vc++にある
wmain( int argc, wchar_t *argv[ ])
みたいに引数をwchar_tにすることはできるでしょうか?
108デフォルトの名無しさん:2009/09/26(土) 23:13:13
エントリポイントwmainは非標準なので、gccにはない
main関数内でargvをワイド文字列の配列に変換してwmainに渡すという手が有る
109デフォルトの名無しさん:2009/09/26(土) 23:15:14
ありがとうございます,それでやってみます.
110デフォルトの名無しさん:2009/10/01(木) 18:52:06
質問です。
コンパイルオプションとして-Werrorをつけたいのですが、
実装上どうしても、取り除くことができない警告があります。
この警告だけはWerrorの対象からはずすということができますでしょうか?
もしできるならその方法を教えてください。
111デフォルトの名無しさん:2009/10/01(木) 19:29:47
gccのソースをいじる
112デフォルトの名無しさん:2009/10/01(木) 20:24:23
>>110
外したい警告がどういう警告なのか書けよ。
113デフォルトの名無しさん:2009/10/01(木) 22:47:25
-Whogeで有功になる警告なら-Wno-hogeで無効に出来るだろうし、
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
なんてのもある
114110:2009/10/01(木) 23:00:07
>>111-113
返答ありがとうございます。
Werrorの非対象にしたいのは-Wをつけた際に出力される、longjmp関連の警告です。
-Wは複数の機能を持つオプションなので、-W自体を無効化はできない状況です。
115デフォルトの名無しさん:2009/10/01(木) 23:21:56
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
にある通り、-Wは-Wextraの別名で、含まれる警告オプションのうち
longjmpが関連しそうなのは-Wclobberedと-Wuninitializedだから、
-Wno-clobbered -Wno-uninitializedをつけてみたらどうか
116デフォルトの名無しさん:2009/10/01(木) 23:23:49
-Wno-error=uninitializedとかでも良いかもな
117110:2009/10/01(木) 23:34:35
>>115-116
ありがとうございます!
今は試せる環境がないので明日挑戦してみます。
118デフォルトの名無しさん:2009/10/12(月) 00:59:23
-fltoが入る前に-combine試してみたけど、
4.4だと引数が多すぎって言われてコンパイル出来ない事があるな
4.5になると引数の最大値が大きくなったりするんだろうか…
というかしてくれないと困る。
-combine -fwhole-program -ftoでビルドしたいんじゃー
119デフォルトの名無しさん:2009/10/16(金) 05:13:28
4.4.2
120デフォルトの名無しさん:2009/10/16(金) 09:29:17
>>118
> 4.4だと引数が多すぎって言われてコンパイル出来ない事があるな

これってどういうメッセージ?
121デフォルトの名無しさん:2009/10/16(金) 11:16:12
あーもうconstructors_destructor_fn_imps.hpで一晩潰しちゃったよ><あほか
122デフォルトの名無しさん:2009/10/16(金) 22:28:44
>>120
cc1: error: too many filenames given. Type cc1 --help for usage
123デフォルトの名無しさん:2009/10/17(土) 04:15:11
binutils 2.20
124デフォルトの名無しさん:2009/10/18(日) 17:31:01
HelloWorldを、gcc・g++を使用してWinXP・Ubuntuでコンパイルしてみた。
----------------------------
#include <stdio.h>

int main(int argc, char** argv) {
printf("HelloWorld!");
return (0);
}
-----------------------------
WinXPは正常に実行できたけど、Ubuntuのgccがうまくいかない。

/tmp/ccaeafnN.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld はステータス 1 で終了しました

バージョンは4.3.3。
上記のようにリンクでエラーがでる。
コンパイラはもともと入ってたやつだから、導入に失敗したわけではなさそうだけど。
オプションも出力先以外は指定してないし。
原因が分かるエスパーな方はいませんか?
125デフォルトの名無しさん:2009/10/18(日) 17:40:09
#include <stdio.h>



#include <cstdio>



printf



std::printf

に替えてみたらどうなる?
126デフォルトの名無しさん:2009/10/18(日) 17:46:22
>>124
g++標準のライブラリがリンクされてないように見える。
g++ hello.cc ではなく gcc hello.cc でコンパイルしてない?


127デフォルトの名無しさん:2009/10/18(日) 18:06:18
この手の「普通にやったらエラーが出るはずが無い」のに
gccを使っていてリンクエラーが出る場合、大抵は>>126だよな。

普通にg++とするか、あるいは-lstdc++とかでもなんとかなるもんだけど
意外にそこでひっかかる人も多いよね。

まあ>>124の原因は知らないけど。
128124:2009/10/18(日) 18:44:08
拡張子を.cにしたらいけました。
ありがとう。

それにしてもアホすぎる……。
TDM/Mingwだと「gcc hello.cpp」は通るけど「g++ hello.cpp」がリンクエラー。
\(^o^)/
129デフォルトの名無しさん:2009/10/18(日) 19:27:04
-lstdc++
か?
130デフォルトの名無しさん:2009/10/18(日) 19:32:55
gccの#defineマクロの記述で
通常の関数のreturnに相当する記述ってどうやって書けばいいのでしょうか?


131デフォルトの名無しさん:2009/10/18(日) 19:34:07
それがわからないようならマクロなぞ使うな。あぶなっかしすぎる。
132デフォルトの名無しさん:2009/10/18(日) 19:44:13
>>131
まさか知らないのですか?
バカなんですか?
133デフォルトの名無しさん:2009/10/18(日) 19:56:48
gccの話題じゃないな
134デフォルトの名無しさん:2009/10/18(日) 20:16:45
>130
http://cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html
ここでも読んだらいいよ
もっとも僕は、-pedantic-errorsを付けてコンパイルしているから無縁だけど
135デフォルトの名無しさん:2009/10/19(月) 02:34:19
>>128
要するに、GCCでは拡張子で動作が変わるってことか。
136デフォルトの名無しさん:2009/10/19(月) 06:36:28
C Compilerでなくて Compiler Collectionだからね。
拡張子を識別して使う言語を選択する。
137デフォルトの名無しさん:2009/10/19(月) 08:03:15
拡張子で言語は選んでくれるのにライブラリは選んでくれないという気
の利かなさ。

138デフォルトの名無しさん:2009/10/19(月) 08:12:59
extern "C" {
とかあるしね。言語と実行環境を分けているんだと思う。
139デフォルトの名無しさん:2009/10/22(木) 22:46:09
だってオブジェクトはどちらも.oで、そこからリンクする時に
必要に成るライブラリがどちらかなんて ld には分からない。

増改築を繰り返した田舎の温泉旅館みたいなc++は捨てて、
ISO C(c99)でええやん。
140デフォルトの名無しさん:2009/10/22(木) 22:49:08
c99のほうが田舎の温泉旅館みたいなんだが……
141デフォルトの名無しさん:2009/10/23(金) 18:22:28
C99って使ってる現場あるのか。
142デフォルトの名無しさん:2009/10/23(金) 21:12:36
全機能ばりばり使ってます、という所は少ないと思うが、
//コメントとか、変数定義の混在とかは割と使ってるんじゃないか?
143デフォルトの名無しさん:2009/10/23(金) 21:37:37
変数は最初に必要になった箇所で宣言するようにしたらかなり見易い。
変数はなるべく使い棄てにしたほうがコンパイラもフロー解析しやすいらしいし。
144デフォルトの名無しさん:2009/10/23(金) 22:44:44
数値計算のパッケージ書いてるから、
<fenv.h>がないとどうしようもない。
145デフォルトの名無しさん:2009/10/24(土) 01:03:11
使い捨てと言うか、スコープを狭くすると、フロー解析もやり易いし
レジスタ割り付けも楽。最適化もやりやすく成る。
146デフォルトの名無しさん:2009/10/24(土) 11:44:01
俺の周りではC99という言葉すら通じん…
147デフォルトの名無しさん:2009/10/24(土) 11:54:24
>>144
Fortran使えよ
148デフォルトの名無しさん:2009/10/25(日) 00:51:59
レジスタは一括宣言のほうが楽なんじゃね?
だってベースポインタ一緒なんだぜ?
149デフォルトの名無しさん:2009/10/25(日) 02:41:36
Javaじゃねーんだから汎用レジスタに乗せて使い捨てることもあるだろ
150デフォルトの名無しさん:2009/10/25(日) 02:50:57
いかにメモリアクセスを少なくするかが鍵みたいだよ。
151デフォルトの名無しさん:2009/10/25(日) 03:03:23
>>149
そういう最適化はどこで宣言しようと同じだろ
152デフォルトの名無しさん:2009/10/25(日) 08:52:09
>>148>>149
40年くらい前の最適化の話みたいですね。
153デフォルトの名無しさん:2009/10/25(日) 09:41:30
変数を宣言する=メモリ上に領域を確保する
変数に代入する=メモリ上に書き込む

こんな基本も分かってないようじゃ駄目だろ。

でも、キャッシュから追い出される前に破棄できるデータ領域は重要だよな。
1ms以下で終わる関数は終了までキャッシュメモリから追い出されない可能性あると思うし、
使い終わったらすぐ破棄すれば、その分多くグローバル/スタティックデータをキャッシュで保持できるようになる。


ところで、CPUロジック的には破棄したデータ領域の変更内容ってメインメモリに反映されるんだっけ?
キャッシュが破棄されるのって内容が同一のときだけだろ?
じゃあいくら破棄しても中身書き換えた以上はメインメモリに書き込むんじゃね?

メインメモリへの書き込みを減らすには、できるだけ同じデータ領域を使いまわすのがいいんじゃないかな。
ヒープ領域とかなら繰り返し使われるよね。
でもJavaの場合で最小値が2MBだって。
優先的に実行されるアプリじゃない限り使い回しは難しいね。

確実に使いまわせるのはやっぱりスタック領域だよね。
直近の4kByteが必ず1次キャッシュに入る。

スタックに確保するには、引数渡ししたデータと普通に宣言した変数だよね。
少々のデータなら参照渡しするより値渡ししたほうがキャッシュ効率がいい事になる。
わけないか。
使った分だけ古いのがキャッシュから追い出されるんだ。
だから、ループで散らばったデータを使うくらいなら、ループだけを関数宣言してでもデータを一箇所に集めることが重要なのかな。
あ、そこで書き込みしないデータをループの直前でフォーカス作って変数宣言してコピーしたらいいわけだ。
結局おんなじか。
何度もスタックをキャッシュから追い出すくらいなら普通にヒープにまとめて領域取ったほうがいいな。
変更しなければ書き戻されはしないんだし。
結局小さいデータはオート変数ででっかいデータはアロケート・・ごく普通だな。
154デフォルトの名無しさん:2009/10/25(日) 09:48:42
コンパイラの最適化舐めんなよ
155デフォルトの名無しさん:2009/10/25(日) 09:57:23
gccの最適化は糞過ぎる
ICCを少しは見習えつーんだよ
156デフォルトの名無しさん:2009/10/25(日) 10:59:38
>>153
35年くらい前の知識で停まってるね。
register宣言が出てきた頃かな?
157デフォルトの名無しさん:2009/10/25(日) 10:59:52
ごめんなさい。。。
158デフォルトの名無しさん:2009/10/25(日) 11:53:01
ICCがgccより明かに優れているところなんてループ展開とかベクトル化とかだけだろ
スタックをどういう風に使うかなんて部分では大差ないよ
159デフォルトの名無しさん:2009/10/25(日) 12:23:37
記憶だと、gcc 4.4でiccの最適化を越えてる
160デフォルトの名無しさん:2009/10/25(日) 12:59:09
それはないから
161デフォルトの名無しさん:2009/10/25(日) 13:05:18
GCCをアーキテクチャ決め打ちのICCと比較しようとする時点で
頭の悪さが丸出しw
162デフォルトの名無しさん:2009/10/25(日) 14:10:45
163デフォルトの名無しさん:2009/10/25(日) 14:35:52
やるじゃんgcc
164デフォルトの名無しさん:2009/10/25(日) 20:50:27
>>162
64Bitだと偉い差だ。そうえいばx264なんかもビルドしてバイナリ配ってる人なんか32Bitは
gcc3.4.6なんだけど64Bitはgcc4.4を使ってる。

ちょっとgcc4.4.2を落として来るわw ffmpeg自己ビルドなのでw
165デフォルトの名無しさん:2009/10/25(日) 21:06:59
gcc4.4系統はバグもあるし
ライセンス問題もあるから使わないほうがいいぞ
166デフォルトの名無しさん:2009/10/25(日) 21:10:40
まあ! なんて素敵なFUDでしょう!!
167デフォルトの名無しさん:2009/10/25(日) 21:15:05
とりあえずbinutilの2.20が10/16に新しいの出てたんでまず更新。

でgcc4.4.2を気合のシステム上書き(現状4.3.4)の--prefix=/usrインスコでコンパイルスタートして
5分くらい経ってやっぱダメだろって思ってCTL+C押して--prefix=/opt/gcc-4.3 --program-suffix=-4.3
にしたヘタレです・・・

今コンパイル中、CPUフェノムなんで--with-tune-32=k8 --with-tune-64=amdfam10こんなのもつけてみました。
168デフォルトの名無しさん:2009/10/25(日) 21:16:54
おおお、焦ったww
--prefix=/opt/gcc-4.4 --program-suffix=-4.4ですねw
変なとこからコピペしたから4.3になってた。本当に4.3のままconfigしちゃったかと思って自分でビビったわ
169デフォルトの名無しさん:2009/10/25(日) 21:28:09
>>164
グラフの目盛りよく見ろ。そのうえでえらい差って感じたんならいいけどさ。
170デフォルトの名無しさん:2009/10/25(日) 21:30:37
>>169
ああああああああああああああああああああああああぁぁぁぁ
171デフォルトの名無しさん:2009/10/25(日) 21:52:36
とか言いながら終わった、しかしグラフには騙された・・・
$ /opt/gcc-4.4/bin/gcc-4.4 -v
Using built-in specs.
Target: x86_64-linux-gnu
コンフィグオプション: ../configure --prefix=/opt/gcc-4.4 --program-suffix=-4.4 --enable-shared --with-system-zlib
--without-included-gettext --enable-threads=posix --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --with-gmp --with-tune-32=k8 --with-tune-64=amdfam10
--with-multilib-list=x86_64-linux-gnu,i386-linux-gnu --build=x86_64-linux-gnu --host=x86_64-linux-gnu
スレッドモデル: posix
gcc version 4.4.2 (GCC)
172デフォルトの名無しさん:2009/10/26(月) 20:19:45
こんな目盛りなら騙して欲しいよな
http://i.msdn.microsoft.com/Aa290049.vcia64alignment_fig2(ja-jp).gif
173デフォルトの名無しさん:2009/11/14(土) 21:57:31
ゲーツェーツェーにはCPP CXX g++ などなど
C/C++フンパイラだけいろいろあるけど


何がどう違うの。



174デフォルトの名無しさん:2009/11/14(土) 23:20:15
CPP CXXはシェルの変数じゃなかろうか
175デフォルトの名無しさん:2009/11/14(土) 23:28:55
cpp はプリプロセッサだろ。 常識的に考えて。
C++ のコンパイラやコンパイラドライバではない。

システムによってはコマンドに + の文字が使えないことがあるので、
便宜上用意されているのが cxx 。
たぶん、中身は一緒だと思う。
176デフォルトの名無しさん:2009/11/15(日) 00:23:33
cc、cxx、c++辺りは、GCCでないシステム標準のコンパイラのことがある。
LinuxなどGCCを標準のコンパイラとして採用していると、GCCへのシンボリックリンクになっているけど。
177デフォルトの名無しさん:2009/11/15(日) 03:47:24
>>159
よぉ、AMD使い!
178デフォルトの名無しさん:2009/11/16(月) 00:13:00
AMDでgccに負けるほどiccってダメなのか
179デフォルトの名無しさん:2009/11/16(月) 01:14:48
商用コードは品質が悪いから仕方ない
180デフォルトの名無しさん:2009/11/16(月) 08:35:20
181デフォルトの名無しさん:2009/11/16(月) 11:15:09
それ読んでgcc 4.4.3で試したけどその通りに最適化してくれないことがままあって困るw
182デフォルトの名無しさん:2009/11/16(月) 19:54:02
パーパプー パーパプー パーパプーパーパプーパーパプー
ピーロピーローリーローリロ
ででーででーででー
パスーン

ピンポロピンポロピンポロピロピロプー



未だに自作のプログラムでダウボーイを作ってやろうと思っているのにできねえ俺は
もうだめだ
183デフォルトの名無しさん:2009/11/19(木) 12:27:58
gcc(ver4.3.2) のコンパイルオプションで、
-lXm -lXt -lSM -lICE -lXpm -lXext -lX11 -lm
とか必要なライブラリ全てを記述しなくても
-lXm
だけでOKでした。
何か指定したライブラリ(この場合 /usr/lib/libXm.so.2.0.1) の依存ライブラリを調べてリンクしてくれるようですが、これって昔からそうだったのでしょうか?
10年近く前は、一つでも指定を忘れると駄目だったので、よく知らないライブラリも呪文のように指定していたような記憶があるのですが。
184デフォルトの名無しさん:2009/11/19(木) 19:08:48
>>183
ライブラリが収まってるディレクトリに libXm.la ってファイルがないか?
それ読んでみ
185デフォルトの名無しさん:2009/11/21(土) 01:34:35
gcc 単体で libtool ライブラリなんか見るの?
186デフォルトの名無しさん:2009/12/01(火) 20:54:52
ビルドした時刻をバイナリに埋め込みたいんだけど
なんかいい方法ある?
最後にリンクするときに日時がわかるものを埋め込みたい
187デフォルトの名無しさん:2009/12/01(火) 21:22:47
コンパイル日時じゃなくてリンク日時?
前者は__DATE__とか__TIME__とかあるけど
188デフォルトの名無しさん:2009/12/01(火) 21:36:38
>>187
Makefile で、リンクの直前にそれかけるしか無いんじゃないかな。
189デフォルトの名無しさん:2009/12/01(火) 21:56:37
__DATE__,__TIME__を初期値にしたグローバル変数だけの
オブジェクトをリンクごとに生成して埋め込めば?
190189:2009/12/01(火) 21:58:39
ごめん、>187と同じだった。
191デフォルトの名無しさん:2009/12/06(日) 13:41:22
質問!
Linux@i386(IA-32)のgccでC言語とアセンブラを組み合わせて使っています。
ebx, esi, ediは通常ならcallee-saveですが、
アセンブラ側の都合でcaller-saveとして扱わなければならない箇所があります。
今はmanを参考に-fcall-used-〜オプションを付け
プログラム全体でcaller-saveとして扱っています。
関数ごとにcallee-save, caller-saveを切り替えて速度を稼ぐことは可能ですか?
可能なら方法を教えてください。
192デフォルトの名無しさん:2009/12/06(日) 14:57:42
>>191
特殊な ABI を要求する部分だけ別モジュールにして、
そこだけ CFLAGS 切り替えればいいんじゃない?

昔組み込みでそんな感じにしてたけど。
193デフォルトの名無しさん:2009/12/06(日) 15:19:44
ああ、でも callee-save 環境から caller-save 環境を
どう呼び出かってのがあるね。どうやってたかな…。
194デフォルトの名無しさん:2009/12/06(日) 15:22:57
195デフォルトの名無しさん:2009/12/06(日) 15:28:05
ようわからんけど、attributeで指定するとか?
196デフォルトの名無しさん:2009/12/06(日) 15:31:40
すまん、ちょっとよく覚えてない。多分 hook を挟んで
どうにかしていたと思う。

ただ 個別に -fcall-used-REG を保守するのも段々面倒
になってきて、最後は「えいや」で setjmp ばりに保存
する hook にしちゃった気がする。
197191:2009/12/06(日) 16:52:18
>>192-196
ありがとうございます。
まず__attribute__((returns_twice))を調べてみます。
198デフォルトの名無しさん:2010/01/08(金) 15:41:53
教えてください

gccでjavaの練習をやろうと思うのですが、
gcc -vで
--enable-languagesにjavaが含まれていれば大丈夫でしょうか
gcj -vだとcommand not foundになります
199デフォルトの名無しさん:2010/01/08(金) 16:54:23
どうしても gcj を使わなければならないという理由がないのなら
Sun の JDK をインストールして勉強しれ。
# command not found に対処できない人が使えるようなものじゃないから…
200198:2010/01/08(金) 19:20:48
レストン

もう少しgccを触って駄目だったらJDK逝きます
201デフォルトの名無しさん:2010/01/09(土) 09:12:51
とっととJDKに逝け
202デフォルトの名無しさん:2010/01/12(火) 07:23:45
naked属性な値を返す関数でreturnがないって警告が出るんだけど
この警告だけ消す方法ないですか?
戻り値はインラインアセンブラ内で書いてる
203デフォルトの名無しさん:2010/01/12(火) 10:03:10
戻り値をインラインアセンブラで
int
hoge(void)
{
int ret;
asm ("hoge":"=r"(ret));
return ret;
}
みたいに書いてみたら
204デフォルトの名無しさん:2010/01/12(火) 19:10:06
gotoでぶっ飛ぶのかもよ。
205デフォルトの名無しさん:2010/01/12(火) 19:16:31
>>203
やっぱそれしかないですか
その方法だと余計なレジスタが増えるのがどうも
ありがとうございました
206デフォルトの名無しさん:2010/01/12(火) 19:25:26
余計なレジスタは増えんでしょ
-fomit-frame-pointer付きでコンパイルしてみたら
207デフォルトの名無しさん:2010/01/12(火) 20:28:58
register int ret asm(レジスタ);
にしたら指定のレジスタ使ってくれました
gccのバージョンで変わったりしないか不安ですけど
208デフォルトの名無しさん:2010/01/12(火) 21:01:15
ほうほう
209デフォルトの名無しさん:2010/01/13(水) 07:17:49
戻り値に使われるレジスタ以外を
asmで破壊されるレジスタに指定するという方法もあるのでは
210デフォルトの名無しさん:2010/01/13(水) 09:52:26
>>207
その仕様は今まで変わったことないから大丈夫でないかとは思うが。

>>209
clobberしすぎるとcc1が文句言ってくるので程々にしませう。

ということで妙なコードを書くときは、その関数を
__asm__(
"func:\n\t"
  :
"ret");
みたいに書かないとダメだと思う。
211デフォルトの名無しさん:2010/01/13(水) 11:25:56
peephole2って凄いね
212デフォルトの名無しさん:2010/01/19(火) 22:22:38
Linux x86_64 な環境において、gcc version 4.3.4 (Target: x86_64-pc-linux-gnu) な GCC を使って
下記のような XXX.so の中の関数を dlopen、dlsym を使ってよびだせるようにコンパイル
すればどうすればいいのでしょうか?

XXX.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped


調べて、-m32 -ldl をオプションに指定するようにしてみましたが segmentation fault になってしまいます。
アドバイスいただけないでしょうか?
213デフォルトの名無しさん:2010/01/19(火) 22:42:40
基本的に無理
214デフォルトの名無しさん:2010/01/20(水) 01:30:21
どうしてもということになれば、nspluginwrapperみたいな物を
作って何とかするしか。

215デフォルトの名無しさん:2010/01/20(水) 10:29:14
gcc -m32 hoge.c でいいんじゃないか?
216デフォルトの名無しさん:2010/01/22(金) 06:11:12
4.4.3
217デフォルトの名無しさん:2010/01/29(金) 12:28:56
GCC開発者らがGoogleの「Go言語」をサポートする方針を発表
http://sourceforge.jp/magazine/10/01/29/0250228
218デフォルトの名無しさん:2010/02/02(火) 19:20:20
>>217
ブランチ、既にできてるよ。> gccgo
219デフォルトの名無しさん:2010/02/02(火) 19:21:42
220デフォルトの名無しさん:2010/02/02(火) 20:11:27
goってgccに入れるほどのもんなの?
221デフォルトの名無しさん:2010/02/02(火) 20:12:43
政治的な圧力はあったかもね。
222デフォルトの名無しさん:2010/02/02(火) 20:22:23
単にぐぐるがメンテナを出しただけだろ?
223デフォルトの名無しさん:2010/02/02(火) 23:11:44
llvmじゃなくてgcc、というのが面白い。
ライセンス的にllvmの方が好まれると思ったんだが
224デフォルトの名無しさん:2010/02/02(火) 23:26:35
adaとか使ってる人いるの?
金さえ出せばなんでも入れてもらえるんじゃない?
225デフォルトの名無しさん:2010/02/03(水) 00:01:39
Google勤務のgccコミッターが何人もいたはず。
226デフォルトの名無しさん:2010/02/03(水) 00:12:26
>>223
llvmはgccのbackendに出来るし。
227デフォルトの名無しさん:2010/02/03(水) 00:54:01
>>224
カネじゃダメだろ
人とコードを出さないと
228デフォルトの名無しさん:2010/02/03(水) 00:55:22
逆に言えば、人とコードの切れ目が縁の切れ目
229デフォルトの名無しさん:2010/02/03(水) 01:10:11
C#とかは、金と人は出せるが、コードが出せないMSだからか。納得。
230デフォルトの名無しさん:2010/02/03(水) 01:23:58
MS は自前で開発環境用意して囲い込みしたいからだろ。
と、マジレス
231デフォルトの名無しさん:2010/02/04(木) 23:09:07
arm用gcc遅いなんとかしろ
232デフォルトの名無しさん:2010/02/05(金) 10:16:35
arm社に文句言え
233デフォルトの名無しさん:2010/02/09(火) 10:45:29
ARM社に言ってもしょうがないだろ
IARとか、RVDSはもっと速いのかな?
234デフォルトの名無しさん:2010/02/11(木) 15:55:30
なぜgccにはstricmpが無いんだ?アホなのか?
235デフォルトの名無しさん:2010/02/11(木) 15:57:47
コンパイラの問題じゃないだろ
236デフォルトの名無しさん:2010/02/11(木) 19:55:21
strcasecmpがあるから
237デフォルトの名無しさん:2010/02/11(木) 20:15:07
strcmpiじゃなかったっけ
まあ今となっては良い思い出
238デフォルトの名無しさん:2010/02/11(木) 21:40:15
>>234,236,237
コンパイラとライブラリは切れば切れる関係。

例えば同じ Windows 上の gcc でも、Cygwin と MinGW で使える関数が
違うでしょ。

239デフォルトの名無しさん:2010/02/11(木) 23:17:07
ところでnewlibって何なの?
こういうネーミングはやめてほしいんだが
このセンスはさすがに引く
古くなったらどうすんだよ
240デフォルトの名無しさん:2010/02/12(金) 11:09:27
最近は年末にリリースされてるから
241デフォルトの名無しさん:2010/02/12(金) 17:00:11
それならclibだと。
242デフォルトの名無しさん:2010/02/16(火) 17:56:29
243デフォルトの名無しさん:2010/02/17(水) 02:55:25
>>234
STRing Ignore Compareってw
センスの悪い命名…
244デフォルトの名無しさん:2010/02/17(水) 14:11:16
i は Ignore なのか?
case Insensitive の i だと思った
悪い命名なのは疑いようがないけど
245デフォルトの名無しさん:2010/02/17(水) 23:46:25
sprintfおせーぞ
gccだけおせーんじゃ
なんとかしろ
246デフォルトの名無しさん:2010/02/17(水) 23:53:27
文句言う前に、自分で早いsprintfを書けばいいのに
247デフォルトの名無しさん:2010/02/18(木) 00:29:39
std::sprintfとかsprintfと紛らわしい
関数作るんじゃねーよ
248デフォルトの名無しさん:2010/02/18(木) 03:13:31
>>231=>>234=>>245=>>247だとすると、
何のプラットフォームでどんなものを作ってるのか、大体予想つくな
249デフォルトの名無しさん:2010/02/18(木) 21:20:29
>>248
こういう発言ってついったの方が楽しいのにね
250デフォルトの名無しさん:2010/02/19(金) 07:09:00
笑われてるだけでしょ
251デフォルトの名無しさん:2010/02/19(金) 14:34:01
>>250
笑うなよ
252デフォルトの名無しさん:2010/02/19(金) 18:55:54
gccスレでぐっちてる時点で...
253デフォルトの名無しさん:2010/02/20(土) 16:26:44
>233
ARM固有の最適化部分のメインコミッターのほとんどはARM社からお金もらっている人々だよ
最適化で、いつまでたってもARM純正に勝てないのはARM社がコントロールしてるから

ARMのプラットホーム使わないといけない人のほとんどは、gccの中身なんて弄ってる余裕が無いよ
ARMを使ったPCが普及すれば、変わると思うけど

254デフォルトの名無しさん:2010/02/20(土) 22:12:55
昔、玄箱スレでgccはARMよりPPCのが効率よいコード吐くって話があったけど、
状況変わらず?
ARMの命令セットがやや特殊なせいなのかな
255デフォルトの名無しさん:2010/02/20(土) 22:21:04
>>254
自社のコンパイラより効率的なバイナリを
生成するコンパイラは、排除するって明言しているから
どうにもならないよ。

256デフォルトの名無しさん:2010/02/24(水) 07:57:43
gccの文字列処理おせーんだよ

なんでgcc3.4でSSE4.2に対応してねーんだよバカ
257デフォルトの名無しさん:2010/02/24(水) 08:01:10
おそい書き方したお前が悪い
258デフォルトの名無しさん:2010/02/24(水) 12:45:50
>>256
gcc4使えばいいじゃん。
259デフォルトの名無しさん:2010/02/25(木) 02:57:51
pc1:
2.95.3
3.3.6

pc2:
4.3.4
4.4.3

二つずつ入れてて計4つ

>>256
使い分けりゃいいじゃん。
260デフォルトの名無しさん:2010/02/27(土) 14:06:45
gccの文字列処理ってどこを指すの?
261デフォルトの名無しさん:2010/02/27(土) 16:41:37
さあ、ビルトイン関数のことかも
262デフォルトの名無しさん:2010/03/03(水) 10:12:29
>>260
printfの警告とか。
263デフォルトの名無しさん:2010/03/03(水) 13:27:36
ストリーミング命令使ったstr系関数の変態最適化ってやってるんだっけ
264デフォルトの名無しさん:2010/03/10(水) 00:17:34
gccは
char buf[256] = {0};って記述しても
0に初期化されることはない

腐ってやがる
265デフォルトの名無しさん:2010/03/10(水) 00:31:09
>264
バージョンはいくつですか
266デフォルトの名無しさん:2010/03/10(水) 03:05:21
>>264 んなこたーない
267デフォルトの名無しさん:2010/03/10(水) 04:30:31
起動時にbssをクリアしてないとか
268デフォルトの名無しさん:2010/03/10(水) 18:19:47
>>264
いつの時代のgcc?
269デフォルトの名無しさん:2010/03/10(水) 18:20:46
char buf[256] = {0};
で、後ろの255バイトも自動的にゼロクリアされるのは
Cの仕様?それともgccのやさしさ?
270デフォルトの名無しさん:2010/03/10(水) 19:20:51
>>269
Cの仕様
271デフォルトの名無しさん:2010/03/10(水) 22:41:05
>>269
{1}のケースもどうなるか理解しといた方がいいよ。

> the remainder of the aggregate shall be initialized implicitly
> the same as objects that have static storage duration.
272デフォルトの名無しさん:2010/03/14(日) 05:07:16
binutils 2.20.1
273デフォルトの名無しさん:2010/03/14(日) 07:47:11
binutils-2.16.1
274デフォルトの名無しさん:2010/03/14(日) 13:40:41
mallocだと0フィルされる保証はない?
275デフォルトの名無しさん:2010/03/14(日) 13:53:06
普通、確保されるだけじゃないの?
callocなら0フィルされると思うけど
276デフォルトの名無しさん:2010/03/14(日) 13:53:09
今時gcc使ってるやつは莫迦
277デフォルトの名無しさん:2010/03/14(日) 23:21:50
>276
は、何を使ってるのよ
278デフォルトの名無しさん:2010/03/15(月) 00:00:29
279デフォルトの名無しさん:2010/03/15(月) 00:17:30
codesourceryのg++ってdo_global_ctorsとかstartup関連がないみたいなんですけど、
自分で実装するとき、.init_arrのグローバルコンストラクタを呼び出す以外にやることありますかね?

あと、libc(newlib)の初期化とかもやらないといけなさそうですが、方法がわからない。

codesourceryでstl使ったプログラムかけた人いたら教えてください。
280デフォルトの名無しさん:2010/03/15(月) 10:56:04
>>274
無い。
セキュリティホールになるってんでゼロ梅してた時期もあったけど。
281デフォルトの名無しさん:2010/03/15(月) 11:08:15
セキュリティホールってより、暴走の原因とか
282デフォルトの名無しさん:2010/03/15(月) 11:37:41
>>281
それはない。
それはただのバグだ。
283デフォルトの名無しさん:2010/03/16(火) 18:31:56
不定値前提で安定したプログラム作れないほうがよっぽど
284デフォルトの名無しさん:2010/03/16(火) 18:48:52
0クリアするくらいならdeadbeefで埋めたほうがまし
285デフォルトの名無しさん:2010/03/16(火) 19:00:57
新規割り当てメモリを初期化しない場合のセキュリティーホールというのは
上位権限のプロセスが開放したメモリにある情報を読めるかもしれないとい問題
286デフォルトの名無しさん:2010/03/16(火) 19:01:25
フフフフフフフフフフフフフフフ
287デフォルトの名無しさん:2010/03/16(火) 19:06:26
oppai
288デフォルトの名無しさん:2010/03/16(火) 19:09:27
>>285
そりゃライブラリ側の仕事でなくOSの仕事だろう
289デフォルトの名無しさん:2010/03/16(火) 19:14:24
malloc(3)の話だから、OSの仕事も含むのは普通。
290デフォルトの名無しさん:2010/03/17(水) 00:23:13
char buf[256] = {0};
ってやるとgccだとmemset関数を呼び出す
糞実装になってるw

アホだろw
291デフォルトの名無しさん:2010/03/17(水) 00:24:54
そこでmemsetを呼び出さない処理系を教えてくれ
292デフォルトの名無しさん:2010/03/17(水) 00:29:33
gcc糞だからなぁ
293デフォルトの名無しさん:2010/03/17(水) 01:22:05
>>291
gcc-4.3は呼び出さない
294デフォルトの名無しさん:2010/03/17(水) 01:33:32
-minline-all-stringopsって使っていいの?
295デフォルトの名無しさん:2010/03/17(水) 01:51:04
>>290
どうしてほしいの?rep stosdにでもしてほしいとか?
296デフォルトの名無しさん:2010/03/17(水) 03:38:41
>>289
含まねーよ。物事を区別して考えられないバカっているんだねえ。
297デフォルトの名無しさん:2010/03/17(水) 07:31:27
>>284
いい悪いってか、用途によるでしょ。
バイナリはでかくなるよ
298デフォルトの名無しさん:2010/03/17(水) 07:33:10
ちょっとタンマ
>>297の答えに自信ない
299デフォルトの名無しさん:2010/03/17(水) 14:11:14
1kbも増えんだろ
300デフォルトの名無しさん:2010/03/17(水) 15:57:20
>>296
あるライブラリ関数について、
C標準では定義されてないことを、
OSの方で定義していることは良くあること。
たとえばスレッドセーフかどうか。
301デフォルトの名無しさん:2010/03/18(木) 09:48:55
それはそのライブラリ関数を使う側にとっての関心事項。
>>285のは他プロセスないしカーネルにとっての関心事項。
別の話だね。
302デフォルトの名無しさん:2010/03/18(木) 10:28:13
他プロセスがmallocおよびその下請システムコールを呼ぶ場合の話でしょ?
303デフォルトの名無しさん:2010/03/19(金) 07:04:48
>>300
OSじゃなく処理系だろ
304デフォルトの名無しさん:2010/03/20(土) 09:55:19
CPU Frequencyをリアルタイムで取得するgoodな方法を教えてくれ
305デフォルトの名無しさん:2010/03/20(土) 10:10:30
RDTSC
306デフォルトの名無しさん:2010/03/23(火) 22:46:45
プリプロセッサの処理中にメッセージを表示したいのですが、
gccでも可能でしょうか?
Visual C++ では #pragma message("msg") などと書けばできたのですが。
307デフォルトの名無しさん:2010/03/24(水) 00:12:02
>>306
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
によると、
#pragma message "Compiling " __FILE__ "..."
とか出来るっぽいぜ
308デフォルトの名無しさん:2010/03/24(水) 17:22:22
>>305
今はだめだろ。CPUいっぱいあるから。
309デフォルトの名無しさん:2010/03/24(水) 19:57:17
ついでにいうとCPU, OSの組み合わせによってはRDTSCがエミュになってしまい
数百クロックを要する。
だがそのような環境では逆に全コアでタイマカウンタが一貫してたりする。
310306:2010/03/25(木) 21:44:47
>>307
ありがとうございます。しかし試してみたところダメでした。
-Wunknown-pragmasでコンパイルしたら「無視しました」みたいなメッセージが出ました。
gccのバージョンによるんですかね。4.3.2でした。
311デフォルトの名無しさん:2010/03/27(土) 00:23:57
>>307
#warningで出来るかなと思ったら引数のマクロ展開はしないとか
ふざけた事を抜かしているのであまり使えないな。 この程度は
出来るけど。

#warning Message

$ gcc -c source.c
source.c:1:2: warning: #warning Message

waring:#warning が冗長で醜いなあw

312デフォルトの名無しさん:2010/03/27(土) 09:37:53
俺もそれは浮かんだが、-Werrorを入れてる環境だと止まるので完全ではないわな
313デフォルトの名無しさん:2010/04/01(木) 23:33:33
Xeon 5500って、最適化オプションの名前って何ですか?

nocona?
core2?
314デフォルトの名無しさん:2010/04/02(金) 07:35:10
>>313
たしか〜

nehalem-exかNorthwood
315デフォルトの名無しさん:2010/04/02(金) 10:42:05
最適化してもあまり変わらないんだけどな
SSE2を使うだけで十分だと思う
316デフォルトの名無しさん:2010/04/02(金) 21:31:49
nativeでいいよ
317デフォルトの名無しさん:2010/04/07(水) 10:20:40
4.5.0-RC-20100406
318デフォルトの名無しさん:2010/04/14(水) 15:49:00
GCC4.4.1は-msse・最大最適化でコンパイルすると、float演算はSSE命令により
自動ベクトル化されるが、整数演算はベクトル化されない。整数移動はベクトル化
されるが、float用SSE命令が使われていた。GCCはMMXや3DNOWコードを吐かないの?
319デフォルトの名無しさん:2010/04/14(水) 21:08:15
GCC 4.5.0 release
320デフォルトの名無しさん:2010/04/14(水) 21:43:24
MMXは基本的にshort以下の整数に使うもんだし
飽和演算とか利用してこそだし
あまり自動最適化には向かないんじゃない
321デフォルトの名無しさん:2010/04/15(木) 01:44:02
MMXは切替えなくちゃ使えないから使わないみたいなのを読んだような気がする
322デフォルトの名無しさん:2010/04/15(木) 07:15:21
SSEの整数命令使えばいいんじゃない
323デフォルトの名無しさん:2010/04/15(木) 12:53:50
整数はベクタ化の恩恵を受けにくいからじゃないかな。
単なるコピーならfloat32でも同じことだし。
324デフォルトの名無しさん:2010/04/15(木) 22:23:12
-mmmxとか-m3dnowじゃないと使わないんじゃない
SSEで全部まかなえるわけだし
325デフォルトの名無しさん:2010/04/15(木) 23:35:38
>>324
普通のSSEには整数命令入っていないよ
-mmmxや-m3dnowでもMMXレジスタは使っていなかった。
326デフォルトの名無しさん:2010/04/15(木) 23:52:09
alignmentしてないと速くなんないからじゃね?
327デフォルトの名無しさん:2010/04/16(金) 00:02:00
普通のSSEじゃないだろ最初のSSEだろ
328デフォルトの名無しさん:2010/04/16(金) 20:29:37
Pen4あたりから入り始めたんだっけ?
329デフォルトの名無しさん:2010/04/17(土) 19:38:11
何が? 最初のSSEはPenIIIだよ。
330デフォルトの名無しさん:2010/04/18(日) 01:19:50
pen3のsseは整数演算できない
331デフォルトの名無しさん:2010/04/18(日) 02:33:27
GCC4が登場した頃には整数SIMDができるSSE2の登場から数年経過しており、MMXに
よる整数SIMDの需要が少なかったからか?さらに、GCC4登場初期はスマートフォンや
PDAにiwmmxtが搭載されていたが、そもそも当時はスマートフォンが普及しておらず
MMX系の需要は少なかったからか。で、今ではスマートフォンが普及しgccに
armの128bit自動ベクトル化が搭載されたが、既に時代遅れのiwmmxtは対象外
という事か。
332デフォルトの名無しさん:2010/04/18(日) 14:05:30
gccは商用コンパイラにどれくらい負けますか?
333デフォルトの名無しさん:2010/04/18(日) 14:06:59
MMXはintに大体適用できないから
一生懸命対応するメリットが少ないんじゃないの
334デフォルトの名無しさん:2010/04/19(月) 03:58:34
>>332
あらゆるCPUに同じコアで対応しているから、乗算結果の上位の取り出しや飽和演算で
最適コードを吐かない、MMXのように切り替えが必要な処理は実装されないんじゃね?
>>333
iwmmxtならそもそもfpu搭載していないので切り替え不要だし、加減算やshort乗算には効果あるよ
335デフォルトの名無しさん:2010/04/19(月) 17:17:45
gcc4って最初かなりすごかったのに、後からどんどん遅くbuggyになってるよね
プロプライエタリの工作員が本気出し始めたのかな
336デフォルトの名無しさん:2010/04/19(月) 17:19:45
4.5からbackendをplugin化出来るようになったからいつでもllvmに逃げられるようになったけどね
337デフォルトの名無しさん:2010/04/19(月) 21:03:17
Benchmarks Of GCC 4.5.0 Compiler Performance
http://www.phoronix.com/scan.php?page=article&item=gcc_45_benchmarks
338デフォルトの名無しさん:2010/04/21(水) 02:45:57
ポインタ渡しの関数内でSIMDを使いたい場合、仮引数をstruct{long __attribute__((aligned(16)))
a[2][8];}*aのようにして、a->a[i][j]でアクセスしないとアライメントデータとして扱われない。
ソース冒頭で構造体型定義を使っても可。もっと簡単にポインタがアライメントされて
いる事をgccに分からせる方法はないの?
また、func(struct{long __attribute__((aligned(16))) a[2][32];}*__restrict a,
struct{long __attribute__((aligned(16))) a[2][32];}*__restrict b, int *__restrict c){
int i;for (i=0;i<8;i++){a->a[0][*c*4+i]=b->a[0][i];a->a[1][*c*4+i]=b->a[1][i];} }
のように二次元配列を2つ受け取り、ポインタ渡しで指定されたオフセット分ずらして
転送する関数を書くと、versioning for alias requiredとなり非SIMDコードも生成
されるが、[*c*4+i]を[(*c+=0)*4+i]とすると非SIMDコードは生成されない。
>>335
OSSへの破壊工作ってあるの?
339デフォルトの名無しさん:2010/04/21(水) 09:15:33
十分簡単だろ。
340デフォルトの名無しさん:2010/04/21(水) 10:53:16
>>338
マクロ使えよ
341デフォルトの名無しさん:2010/04/21(水) 11:15:06
http://codepad.org/AKWhbBiV
のコードを g++ 4.3.2 で最適化なしコンパイルして実行したら,

--Start 1--
Destructor
Destructor
--End 1--
--Start 2--
Destructor
--End 2--
Destructor

という結果になった.
(Start 2 と End 2 の間にもう1つの"Destructor"があることを期待していた)

G++ だと,返されるオブジェクトが関数のローカル変数の場合は,
戻り値用の一時オブジェクトは作成されない仕様なの?
342デフォルトの名無しさん:2010/04/21(水) 11:33:58
>>341
Start 2 〜のように戻り値と同じ型のローカル変数を return した場合、
C++ の規格でコピーの省略が許されている。 (ISO C++ 12.8 p15)

これに対して Start 1 〜のほうで必要になる、既存の変数から関数引数への
コピーは省略できない。

コピーの省略が許されているだけなので、実際にコピーされるかどうかは
コンパイラやコンパイルオプションやコードの複雑さなどで変わる可能性がある。
343デフォルトの名無しさん:2010/04/21(水) 11:38:09
>>342
コピーの省略が認められているとは知りませんでした
大変勉強になりました
どうもありがとうございます
344デフォルトの名無しさん:2010/04/21(水) 11:44:51
345デフォルトの名無しさん:2010/04/21(水) 12:09:15
>>341
g++ の場合、それで困るようなら -fno-elide-constructors を使うという手がある。
http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/C_002b_002b-Dialect-Options.html
346デフォルトの名無しさん:2010/04/21(水) 15:53:02
>>345
分かりにくいオプション名だなあ。
RVO(Return Value Optimization)を使うべきだよね。
347デフォルトの名無しさん:2010/04/21(水) 16:03:12
頭にno-が付いてるおぷそんは嫌やな
じゃあyea-があるのか?と思ったらないし
348341:2010/04/21(水) 16:09:23
>>344-345
ご親切にありがとうございます
349デフォルトの名無しさん:2010/04/21(水) 21:33:42
Benchmarking LLVM & Clang Against GCC 4.5
http://www.phoronix.com/scan.php?page=article&item=gcc_llvm_clang
350デフォルトの名無しさん:2010/04/26(月) 19:48:31
for (i=0;i<128;i++)c[i]=a[127-i]*b[127-i];のように配列に乗算して順番を
反転するコードもSIMD化されない。a[i]やb[i]への書き込みが禁止されているのなら、
for (i=0;i<128;i++)c[i]=a[i]*b[i];for (i=0;i<64;i++){buf=c[i];c[i]=c[127-i];
c[127-i]=buf;}としなければならない。
351デフォルトの名無しさん:2010/04/26(月) 20:02:49
どんなコードを吐いてるの?
352デフォルトの名無しさん:2010/04/26(月) 20:10:51
>>350
マジ?
swap処理なんて最悪に遅いのだけど。sizeof(* c)が判らないからなんとも言えないけれど、
a*bを別に保存しておいて転送した方が速い希ガス。
353デフォルトの名無しさん:2010/04/26(月) 20:30:01
最適化オプションを知らないとか?
354デフォルトの名無しさん:2010/04/29(木) 02:14:24
MakefileでCPUの種類を判別してコンパイルオプションを変更したいのですが、
どのようにすればよいのでしょうか?
355デフォルトの名無しさん:2010/04/29(木) 02:24:37
CPUの種類からコンパイルオプションを生成するコマンドを作ればいいんじゃない
356デフォルトの名無しさん:2010/04/29(木) 05:05:38
kwsk
357デフォルトの名無しさん:2010/04/29(木) 05:20:55
configure書けば
358デフォルトの名無しさん:2010/04/29(木) 13:00:52
CPUの種類が自分でわからないのに、コンパイラがわかるわけがない
359デフォルトの名無しさん:2010/04/29(木) 16:38:25
MakefileでCPUの種類を判別するプログラムを実行すりゃいいだろ
アホか
360デフォルトの名無しさん:2010/04/29(木) 16:42:38
どこにあるんだよ
361デフォルトの名無しさん:2010/04/29(木) 16:47:11
CPUの種類を判別する
でググれ
362デフォルトの名無しさん:2010/04/29(木) 16:56:36
組み込み向けとかも判別してくれるのかよ
x86用で個別にtuneしてもあんまりかわらんだろ
363デフォルトの名無しさん:2010/04/29(木) 17:24:23
クレクレ言うな
自分で「やれ」
364デフォルトの名無しさん:2010/04/29(木) 17:46:22
探しているものは、たいてい見つかる
必死で探せばな
365デフォルトの名無しさん:2010/04/29(木) 17:54:58
すべてを網羅するようなものはないみたいだ。
366デフォルトの名無しさん:2010/04/29(木) 18:19:12
>>365
ある程度までならあるってことだ。
判別不能な分はunknownでいいだろ。
細かいところはあとでなんとかしろ。
367デフォルトの名無しさん:2010/04/29(木) 20:44:54
最適化してもデバッグ出来そうにないから、オプションつけても無駄のような
368デフォルトの名無しさん:2010/04/29(木) 21:35:41
march=nativeで十分だって
369デフォルトの名無しさん:2010/04/30(金) 00:09:29
>>366
でも90MHz Pentium で受け入れられるのに 550MHz K6-3 で蹴られるのは悲しい。
370デフォルトの名無しさん:2010/04/30(金) 11:32:43
あむどはふりむかない
371デフォルトの名無しさん:2010/04/30(金) 11:51:08
あむどは最適化しなくても早いって、言ってなかったけ
372デフォルトの名無しさん:2010/05/01(土) 05:50:20
4.4.4
373デフォルトの名無しさん:2010/05/01(土) 07:21:14
>>371
Intel みたいに gcc にコミットできないから、
最適化できないのだよ。
Windows 以外では、gcc を1割最適化できれば、
クロックを1割早くするのと同じなのにな。
374デフォルトの名無しさん:2010/05/01(土) 11:57:23
つってもなー、CPUの内部アーキテクチャ変わったらまた最適化変えなきゃだろ?
375デフォルトの名無しさん:2010/05/01(土) 18:24:01
これまでのAMDのCPUはフル機能命令デコーダただ並べてたりクセの少ないアーキだから
(Intelはフル機能と機能限定の組み合わせで省電力&面積削減の分キャッシュ増量可能に振ってる)
x86一般最適化がしてあればそれ以上は大して高速化しないと思われ
376デフォルトの名無しさん:2010/05/01(土) 19:18:08
いくらあむど贔屓に作ってもgccが1割最適化するなら
印р1割早くなる気がする
377デフォルトの名無しさん:2010/05/02(日) 12:40:22
>>376
Intelへの最適化は結構進んでるよ。
もちろん icc ほどじゃないが。
378デフォルトの名無しさん:2010/05/03(月) 02:52:03
あむどは各板でバカにされててかわいそうでつ
gccぐらい夢みさせてあげてえ
379デフォルトの名無しさん:2010/05/03(月) 16:00:40
380デフォルトの名無しさん:2010/05/03(月) 18:05:00
>>378
もっさり、じゃないぶんましではないかと。
381デフォルトの名無しさん:2010/05/04(火) 18:16:27
MinGW64_x64で手持ちのアプリを片っ端から64ビット化してるんだが
__fastcall の指定で大量のワーニングが出たのでびっくりして調べてみたら
x64は基本レジスタ渡しで __fastcall とかは指定しても意味がないということを初めて知った
レジスタ渡しの方法がVC++と非互換らしいけどいつかどっちかに統一されるんだろうか
382デフォルトの名無しさん:2010/05/04(火) 18:55:52
レジスタ16個もあるからかな
383デフォルトの名無しさん:2010/05/04(火) 19:07:42
アセンブラでプログラムしてるんですが、普通にasでアセンブルするとサイズが
デカくなるんですが、単純にアセンブルだけしてくれるようなパラメータが
あったら教えてください。スレちだったらスマン。。
384デフォルトの名無しさん:2010/05/04(火) 19:34:18
LLVMの方が性能上だしなぁ
gccなんて意味があるのだろうか?
385デフォルトの名無しさん:2010/05/04(火) 20:02:40
性能ってどういう所がいいの?
386デフォルトの名無しさん:2010/05/04(火) 20:14:09
>>381
非互換ってそれgcc for Linux/x86-64と VC++ for Windows x64それぞれのことを言ってたりしないか?
例えば↓こことか
http://homepage1.nifty.com/herumi/prog/x64.html
387デフォルトの名無しさん:2010/05/04(火) 20:32:11
gccのソースみると、ms_abiってのがあるよ
388デフォルトの名無しさん:2010/05/04(火) 22:48:06
>>384
ffmpeg
インラインアセンブラに対応できないと思う
gccに依存してるffmpegが糞とも言う
389デフォルトの名無しさん:2010/05/08(土) 11:08:45
Intel compilerでffmpegをコンパイルする方法を教えて
390デフォルトの名無しさん:2010/05/08(土) 13:10:04
GCC4.5もう使った人いるのかな。
391デフォルトの名無しさん:2010/05/09(日) 00:27:44
必要に迫られてsnapshotのころから。

そういえばリリース版に入れ直してなかった。

392デフォルトの名無しさん:2010/05/10(月) 20:22:24
GCCを改変して、任意のアセンブラを吐かせたいのですが、
どのようなワードで検索してよいのかわかりません。

具体的には、自作した仮想マシン向けのアセンブリ言語を吐かせたいとおもっております。

アセンブラとアセンブリ言語は適当にでっち上げた物がありますので、
ぜひGCCを利用してCやC++でプログラムを組めるように仕立て上げたいです。
393デフォルトの名無しさん:2010/05/10(月) 20:27:51
すれ違いだが、いま流行りの COINS を利用した方がいいんじゃないかな?
あとは時代遅れの Xbyak とか。
394デフォルトの名無しさん:2010/05/10(月) 20:37:04
テキストファイル置換ソフトの方があってるんじゃないか
395デフォルトの名無しさん:2010/05/10(月) 20:40:48
>>392
調べるなら >>391 やLLVMとか。pccいじるのも楽でいいかもね。
396395:2010/05/10(月) 20:42:38
>>391じゃねえ>>393
397デフォルトの名無しさん:2010/05/10(月) 20:42:40
COINSは初めて知りました、ずいぶんモダンな作りをしていますね。

特定アセンブラを吐くドライバだけを作成できれば、
目的が達成できそうな感じでしょうか?

斜め読みしかしていないので、もっと深くよんでみます。

Xbyakは動的にx86のバイナリを吐くライブラリでしょうか?

ソースは見てないのでなんともいえませんが、x86バイナリ生成部を
オレオレバイナリに置き換えればよさそうですね。

いろいろありがとうございます。
398392:2010/05/10(月) 20:51:17
>>395
pccも改造ベースにはコンパクトで良いとの評判みたいですね。
こっちもソース覗いてみます!
399393:2010/05/10(月) 21:11:41
>>393 は釣りで、いまは LLVM 一択でしょう。(スマ
400デフォルトの名無しさん:2010/05/11(火) 01:00:09
俺もLLVM一択だと思うが、
gccを改変する話に戻すと、検索ワードは「バックエンド」な
401デフォルトの名無しさん:2010/05/11(火) 17:36:51
402デフォルトの名無しさん:2010/05/14(金) 18:50:03
gdbの質問もここでおk?
403デフォルトの名無しさん:2010/05/14(金) 19:06:29
グデブ
404デフォルトの名無しさん:2010/05/15(土) 06:26:37
適切なスレが思いつかないんで、
とりあえず聞くだけ聞いて、それから誘導されるがよい
405デフォルトの名無しさん:2010/05/16(日) 20:35:56
apachでGCCが使えないのですが、gccオプションなどで可能になるものでしょうか?
exeファイルのバイナリーに含まれる文字が原因のようなのですが。
http://pc11.2ch.net/test/read.cgi/mysv/1245157265/770
406デフォルトの名無しさん:2010/05/16(日) 20:38:59
gccに問題ないから。exeファイルうんぬんも関係ない。
407デフォルトの名無しさん:2010/05/16(日) 20:42:18
はい、
apachとのバイナリーレベルでの相性のようです。
408デフォルトの名無しさん:2010/05/16(日) 21:14:23
"\r\n"
409デフォルトの名無しさん:2010/05/16(日) 21:52:11
>>408
Windowsなら、"\n"と"\r\n"は、同じ"\r\n"を出力します。
410デフォルトの名無しさん:2010/05/17(月) 20:19:00
>>409それだとちょっと語弊があるような最終的にはそうなるけどさ
Windowsの場合"\n"だけでCRLF(復帰改行)が出力されるから"\r\n"を明示する意味はない
411デフォルトの名無しさん:2010/05/17(月) 20:57:56
>>410
どうも405の問題は、Windows上においても処理系によっては
¥nがLFであってCRLFで無いという問題の様に思える。 
412デフォルトの名無しさん:2010/05/18(火) 04:55:08
標準出力をバイナリーモードにすればいいとかじゃないの?
413405:2010/05/18(火) 20:11:57
Apache統合スレ 10 (HTTPServer以外も含む)
http://pc11.2ch.net/test/read.cgi/mysv/1245157265/770-786
C言語でstdoutをbinモードにするには?
http://www.tohoho-web.com/lng/200003/00030242.htm

解決しました。
414デフォルトの名無しさん:2010/05/18(火) 20:23:13
窓でパイプ処理やろうとすると必ず通る壁だな
415409:2010/05/22(土) 22:05:47
>>410
違ってた、GCCの場合だけは "\n" なら、\n しか出力しないようなEXEを作る。
実験はWINのサクラエディタで実行してみた。
416デフォルトの名無しさん:2010/05/23(日) 10:11:53
May 22, 2010
The GNU project and the GCC developers are pleased to announce the release of GCC 4.3.5.
This release is a bug-fix release, containing fixes for regressions in GCC 4.3.4 relative to previous releases of GCC.
http://gcc.gnu.org/gcc-4.3/
417デフォルトの名無しさん:2010/05/24(月) 18:06:00
なんでGNU公式の統合開発環境ってないのだろうね。
418デフォルトの名無しさん:2010/05/24(月) 18:49:24
GUIなんて要らないとおもってるから。
419デフォルトの名無しさん:2010/05/24(月) 18:58:16
GNU統合開発環境ってemacsじゃないの?
420デフォルトの名無しさん:2010/05/24(月) 19:22:27
>>419勘違いも甚だしいぞ、失礼なやつだ。
421デフォルトの名無しさん:2010/05/24(月) 20:27:02
教祖に聞け
422デフォルトの名無しさん:2010/05/25(火) 10:41:11
デバッガだけはGUIあった方が断然いい。
異論はまったく認めない。
423デフォルトの名無しさん:2010/05/25(火) 12:28:09
>>530
心配性だな、とっても大人数でいじらなければいけない案件なのか?
424デフォルトの名無しさん:2010/05/25(火) 18:15:08
ロングパスだな
425デフォルトの名無しさん:2010/05/25(火) 20:36:12
>>422
かなり同意。 OllyDBG になれたら GDB なんて使う気にならん。
symdeb に疑問を感じなかった昔の自分が信じられん。
426デフォルトの名無しさん:2010/05/26(水) 02:17:03
おまえらデバッガだの統合開発環境だの言うけど、何がそんなに便利なのか俺に見せてみろよ。

そう後輩に言った10分後、おれは「すまんかった、ちょっとこれマジで教えてくれ…。」と言っていた。
427デフォルトの名無しさん:2010/05/26(水) 06:57:24
>>418
そんなこと思っていたらGDB/MIなんてないだろ。
428デフォルトの名無しさん:2010/05/27(木) 19:14:57
graphite関係のオプションで詳しい説明あるところを教えてください。
キャッシュサイズとかどこで取得するのかなー?
429デフォルトの名無しさん:2010/05/28(金) 15:30:28
4.5はやくしてくれねーかなー
ラムダ式つかいたいから開発保留してるんだけど。
430デフォルトの名無しさん:2010/05/29(土) 01:30:35
>>429 保留してる間に gcc のリリースに貢献すればよいではないか。
431デフォルトの名無しさん:2010/06/01(火) 00:42:37
GCC が C++ を採用するとはビックリした。これも LLVM の影響なのかな(LLVM は C++)?

http://news.ycombinator.com/item?id=1392601
432デフォルトの名無しさん:2010/06/01(火) 01:28:58
なんだ?って思っちゃったがGCC自体のコードをC++で書き直そうって話ね。
433デフォルトの名無しさん:2010/06/01(火) 07:15:10
>>431
> The goal is a better compiler for users, not a C++ code base for its own sake.
とか言ってるわりに、とりあえずどの機能が欲しくて使うことにしたのか、よくわからんな。
434デフォルトの名無しさん:2010/06/01(火) 10:09:50
むこうにも中二病開発者がいるんだろ
435デフォルトの名無しさん:2010/06/01(火) 11:36:30
C言語でもオブジェクト指向なプログラミングはできるし、
継承や多態性も実現できるが・・・。

まあコード量がおおくなって手続きがうざくなるからな。
436デフォルトの名無しさん:2010/06/01(火) 16:56:31
せっかくgccなんだから、objc とか ada とかで書いてみるとか。
437デフォルトの名無しさん:2010/06/01(火) 21:19:39
まじめな話、gcc が c で書かれているから、いろんなプラットホームに移植されたわけで‥‥‥。
438デフォルトの名無しさん:2010/06/01(火) 21:52:21
bootstrapのプロセスはどうなるんだろう? 
439デフォルトの名無しさん:2010/06/02(水) 07:33:00
>>438
クロスが基本となるだろう。
440デフォルトの名無しさん:2010/06/02(水) 13:57:57
>>437
昔はクロス環境作るの大変だったけど、今は普通だし、
開発環境そこらじゅうにあるし、問題にならないんじゃね
441デフォルトの名無しさん:2010/06/02(水) 19:31:49
--enable-build-with-cxx
442デフォルトの名無しさん:2010/06/02(水) 21:30:05
gcc動くけどg++ダメなんて環境はそんなになさそうだしなあ。

ついでにどうでもいいことだがRMSがこの決定に同意しているのか気にならんでもない。
443デフォルトの名無しさん:2010/06/03(木) 09:55:20
おっ、初めての経験。 ちょっと複雑なデーター構造の初期化を実験してたらg++を無限
ループに入れる事に成功したw 以下のコードをg++でコンパイルしてみてくれ。
g++ 4.0.1, g++ 4.1.2で再現された。 gccではすぐに止る。

struct {
 int value;
 union {
  int value2;
  struct {
  int value3;
  int value4;
 } s;
 } u;
} local = { value : 0,
u : s: { value3 : 3, value4: 4 }};

こういう無限エラーループに入る.
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’
init.c:11: error: ‘<anonymous struct>::<anonymous union>’ has no non-static data member named ‘u’

444デフォルトの名無しさん:2010/06/03(木) 10:19:07
ちなみにこれが正解だった

...
local = { value : 0, u : { s : { value3 : 3, value4 : 4 }}};
445デフォルトの名無しさん:2010/06/04(金) 17:27:31
書けるけど読みたくは無い構造してんなぁ
446デフォルトの名無しさん:2010/06/04(金) 17:29:15
>>443
∞ループに入る最小の構造を作るためにもうちょっと単純化してみたら面白いかもよ。
447デフォルトの名無しさん:2010/06/04(金) 20:57:18
mingwのLTOまだあああああああああああ
448デフォルトの名無しさん:2010/06/08(火) 06:25:05
これって知ってた?
http://sourceware.org/gdb/wiki/STLSupport

試したらこんな事が出来て涙が出た。
(gdb) list
7 map<char*, int> test;
8
9 test["hoge"] = 111;
10 test["mage"] = 222;
11 test["moge"] = 333;
12 }
(gdb) p test
$1 = std::map with 3 elements = {
 [0x8049760 "hoge"] = 111,
 [0x8049765 "mage"] = 222,
 [0x804976a "moge"] = 333
}

449デフォルトの名無しさん:2010/06/08(火) 06:33:01
これを/rオプション(raw)で見るといつもの様に

$2 = {_M_t = {
_M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<char* const, int> > >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<ch¥
ar* const, int> > >> = {<No data fields>}, <No data fields>},
_M_key_compare = {<std::binary_function<char*, char*, bool>> = {<No data fields>}, <No data fields>}, _M_header = {
_M_color = std::_S_red, _M_parent = 0x804b028, _M_left = 0x804b008, _M_right = 0x804b048}, _M_node_count = 3}}}


450デフォルトの名無しさん:2010/06/29(火) 22:13:29
FreeBSDの人いる?
gcc 4.5.0で-O2で最適化したら例外をキャッチできないケース見つけた。-O1だとOK。
再現できるか試して欲しい。

再現パターンはこんな感じ。
分岐の中にthrowがあって、最適化の結果throwにあたるコードが関数のエピローグコードの
後ろに移動してしまった場合にたまに発生。

bool flag = true;
void f()
{ if(flag) throw 1; }
int main()
{
try{ f(); }catch(...){ cout << "ok" << endl; }
}
451デフォルトの名無しさん:2010/06/30(水) 08:36:05
4.5.0 ということは ports ? 野良ビルド?
452デフォルトの名無しさん:2010/06/30(水) 10:26:36
うん
453デフォルトの名無しさん:2010/06/30(水) 10:40:31
結局どっちなんだよと思ったのは私だけじゃないはず
454デフォルトの名無しさん:2010/06/30(水) 11:36:41
結局どっちなんだよ!
455デフォルトの名無しさん:2010/06/30(水) 16:40:24
>>451
http://ftp.riken.go.jp/の.tbzと野良の両方で再現した

ただ、OSXからのFreeBSDクロスコンパイル→転送して実行、ではAdaのほうでも再現したのに、
FreeBSD上のセルフコンパイルでは野良ではAdaでは再現しない(C++では再現、gcjはビルドできなかった……)と
結構ばらつく。よくわからん。
456デフォルトの名無しさん:2010/07/02(金) 17:51:11
うーむ
457デフォルトの名無しさん:2010/07/21(水) 08:25:11
gccデベロッパーライトで、プログラミングを勉強・作成しています。
cとc++は少々経験あります。

ロボットを動かすために、マイコンボードのレジスタに書き込むのですが、
サンプルにDDRx |= (1 << PC0)という部分があり、こちらはDDRx(8bit)の0000 0000に書き込むということだと思います。
0000 0001みたいな感じに

次のPORTx &= ~(1 << PC0)が良く分からないのですが、
こちらは初回は動作させないために0にして動かないようにしておくだと思うのですが、その場合
PORTx &= (0 << PC0)ではないのでしょうか?
~をつけてNOTにしてしまうと ↑の例だと1111 1110になってしまうと思います。
どうしてここはNOTになっているのでしょうか?

それとも初期値のレジスタは1111 1111(FullBit)と決まっているのでしょうか?

ちなみにPC0にはサーボモーターが接続されています。
458デフォルトの名無しさん:2010/07/21(水) 08:52:48
0 << PC0 ってなんなんでしょうか?
0 はシフトしても 0 でしょう?
おかしいと思いませんか?
459デフォルトの名無しさん:2010/07/21(水) 09:21:16
>>458確かに0をシフトしても0ですね。
んー…となると動きとしてはどうなってるんでしょう?

0000 0001に対して 左シフトで 0000 0010にして、それをPORTx 0000 0000だとした場合
1111 1101にするってことですよね
ん…違うのか、 PC0の場所が最初、 PC1が次だと仮定して
0000 0001を左シフト 0000 0010 PC1が0000 0010左シフトで 0000 0100
で、現在のPORTx が0000 0110になっているからこれをNOTしてあげれば
1111 1001で、使用するPC0とPC1は停止状態になりますよってことか

でもその場合残りの部分がビット立っている状態になってますが、問題ないのですか?
使わないのであれば全てビットをlowにしておかないと何かもやっとするのですが
460デフォルトの名無しさん:2010/07/21(水) 09:27:03
書いてきて混乱してきた
PORTxっていうのは、常時フルビット0xFFになっていて
例えばPORTAであれば、対応するのはPA0〜7になり
0xFFの0ビット=PA0, 1=PA1 ... 7=PA7って割り当てられている…?

シフトする理由が分からない…シフトする場合↑の通りであるのならば
PA7はオーバーフローして、消えてなくなってしまうし、循環シフトになっているのなら
シフトしてけばしていくほどおかしくなるような…
461デフォルトの名無しさん:2010/07/21(水) 09:34:17
&= ってなんの記号? わかってる?

それから、他人とのコミュニケーションにフルビットとか妙な用語は使わないように。
運転免許マニアの間では全ビットが立ってる、という意味で使われるようだけど。
462デフォルトの名無しさん:2010/07/21(水) 09:47:44
>>461
フルビットって使わないの?すまん、知らなかった

&=ってANDって意味じゃないの?
cで言えば、 a = a & b;といった形だと思ってたんだけど
PORTx = PORTx & ~(1 << PCx);
今回チルダが付いているから、NOTANDだと思うけど
463 ◆fWZlQqSNJk :2010/07/21(水) 09:52:14
トリップ付けておきます
基本情報とか、c勉強した時に例えば2の補数とか説明する・されるときに
フルビットって使ってたんで一般的だと思ってました。
464デフォルトの名無しさん:2010/07/21(水) 10:01:53
>PORTx = PORTx & ~(1 << PCx);
ここまで解ってて何故わからないのかがわからない
そのまま「PORTx の PCx ビット目を0にする(PCxビット目以外はそのまま)」って読めるだろ
465 ◆fWZlQqSNJk :2010/07/21(水) 10:17:32
>>464
うーん…
何となくこのやり取りをしている間に、考えてたら分かってきたような
気もするのだけれども、

NOTANDがかかるのはPORTx全体ではなくて、 & ~(1 << PCx)と書かれているPCxの場所
だけをNOTANDするってことで大丈夫? PORTxに対して行っているからPORTx全体にNOTANDがかかってると思ってた。

後は、シフトする部分がいまいち…
これは、0001を0010にするとかではなくて、ビットをずらすのではなく
0000を0001にしますよ、的な感じでいいです?(1を立てる
466 ◆fWZlQqSNJk :2010/07/21(水) 10:19:31
軽く自分なりにまとめると、
&~がかかる部分は、PCxの場所だけで
シフトするというのは倍々にしていくシフトと違い
1であれば、その場所に1ビットを立てるということで問題ないでしょうか?
467 ◆fWZlQqSNJk :2010/07/21(水) 10:25:17
連投ごめん
ぐむむ、でもそれだとやっぱり(1 << PCx)の1が1を立てるであれば、
へし折るという意味で(0 << PCx)でもいけるような…orz

テンプレっていうか、こういうものだっていう意味で0を作るのならばチルダ(NOT)して
作れってことでしょうか?orz
468デフォルトの名無しさん:2010/07/21(水) 10:43:57
gcc全く関係ない
469 ◆fWZlQqSNJk :2010/07/21(水) 10:47:30
>>
gccでのプログラミングでしたので、ここで質問したのですが、
c / c++の方でしたでしょうか?
それとも、また別な場所です?
470デフォルトの名無しさん:2010/07/21(水) 10:48:33
なんていうか…もうノートにビットパターン書きながらひとつづつ考えてください。
8ビットで PORTx : 0x0f, PCx : 3 と仮定するね。
「(1 << PCx)」 ってのは (1 << 3)だから 00000100 になるよね?すると
「~(1 << PCx)」 は 11111011 と 3ビット目だけが0の値になる。
「PORTx & ~(1 << PCx)」 は 00001111 & 11111011 だから 00001011 でこれをPORTxに代入する。
PORTx の値は 00001111 だったものが 00001011 になってる。つまり3ビット目が0になった。
あとはPORTxやPCxの値をいろいろ変えながらノートに書いて考えてくれ…
# これでわからないなら適当な初心者スレでたのむ
471デフォルトの名無しさん:2010/07/21(水) 10:48:51
Cとかの質問スレだな
472470:2010/07/21(水) 10:51:39
ごめん。書いてあるのは PCx : 2 の場合だった><
473デフォルトの名無しさん:2010/07/21(水) 10:52:25
こいつの制御するロボットには絶対に近づきたくないなw
474 ◆fWZlQqSNJk :2010/07/21(水) 11:17:12
>>470
やっと理解した、ありがとう
シフト演算激しく勘違いしてたわ (1 << PCx)の1は1ビットずらすのではなく
1をPCx分ずらすでしたね。過去ログ見てると恥ずかしい

>>470見て、テストケースで100を2ビットシフトして400作って見てやっと分かった
NANDに関しても、0シフトすればいいんじゃね?って思ってたのが非常に恥ずかしい
0した後に残った結果は0じゃないか…0x0F & 0x00 = 0
もやもや解消されました。頑張る
id出てないから分からないけど答えてくれた人たちthx

>>473
ロボに罪ハナイ…
475デフォルトの名無しさん:2010/07/21(水) 11:53:10
>>474
がんがれ。ロボがコサックダンス踊れるようになるくらいまで。
476デフォルトの名無しさん:2010/07/21(水) 18:42:36
GCC使ってりゃこのスレってことなら
PS3やWii、Androidの開発もこのスレになるな
477デフォルトの名無しさん:2010/07/21(水) 19:00:18
携帯じゃなくても良いからMIDIのシーケンサーつくってみろ。
ずれるかずれないかわかる。
478デフォルトの名無しさん:2010/07/30(金) 21:54:57
質問です。
TOPPERSって言うフリーの組込みOSがあるのですけど、そのソースコードの一部に
こんなマクロが定義してあってチンプンカンプンです。
IA-32の命令に"s"とか"d"ってあったっけ?

#define OBJECT(x,y) __asm("d" #x "," #y "@");
#define MEMBER(x,y) __asm("s" #x "::" #y ",(%0),(%1)@" ::\
"i"(sizeof(((struct x *)0)->y)), "i"(&((struct x *)0)->y));
#define VAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x)));
#define EVAR(x,y) __asm("s" #y ",(%0),(0)@" :: "i"(sizeof(x)));
#define SVAR(x) __asm("s" #x ",(%0),(0)@" :: "i"(sizeof(x[0])));
#define DEFS(x) __asm("s" #x ",(%0),(0)@" :: "i"((unsigned long)x));
479デフォルトの名無しさん:2010/07/30(金) 22:17:38
>>478
__asm の内側はアセンブラの世界。
gas の擬似命令を含むことも出来る。
C/C++ では隣接する文字列リテラルは連結される。
480デフォルトの名無しさん:2010/07/30(金) 22:18:18
>>478
ttp://www.ne.jp/asahi/hishidama/home/tech/c/preproc.html
この辺りの「文字列化」を参照してください。
gcc の -E オプションもマクロの理解を助けてくれると思う。
481デフォルトの名無しさん:2010/07/30(金) 22:28:39
ここで聞くよりTOPPERSのメイリングリストで聞いたほうがいいような気がするんだけど。
482デフォルトの名無しさん:2010/07/30(金) 22:41:17
どうだろう。
あくまでも gcc 側の機能についての質問だからこっちでいいような気もする。
483478:2010/07/30(金) 23:38:46
>>479
文字の連結は理解しているつもりですが、IA-32の命令や疑似命令のようにも思えない。
と言う訳で手元のMacOSXでTOPPERSをコンパイルしてそのマクロを使うkernel_chk.cを
生成しようと思ったけど、LINUXではないのでやはりできず。
来週、会社へ行くまでkernel_chk.cを生成できそうにありません

>>481
TOPPERSの機能に関する質問ではないのでそれはできません
484デフォルトの名無しさん:2010/07/30(金) 23:44:50
TOPPERSってそもそもIA-32をサポートしているのでしょうか。
インテルのCPUで組み込みってあまり聞かない気がします。
私も仕事でTOPPERSを触りましたけど、そのときはルネサスのSHでした。
コンパイルに使用したコンパイラは、もちろんSH用のgccです。
485デフォルトの名無しさん:2010/07/30(金) 23:49:01
ていうか、どんなasm命令に展開されるかは
単純にそのマクロ定義部と呼び出している箇所いくつかを拾い出して
それをcppかければ良いだけでは。
486デフォルトの名無しさん:2010/07/30(金) 23:49:48
>>483
評価版のVMwareを手元のMacにインスコしてLinuxインスコしろ。
487478:2010/07/30(金) 23:50:04
>>484
Linuxのシミュレーション環境に対応しています。
このパッチをあてて
http://www.northern-cross.info/download.html

$ perl ../jsp/configure -C linux
$ make depend
$ make

これで動かせます。
488478:2010/07/30(金) 23:51:31
>>485
それやりたいけどLINUXないお

>>486
面倒ぽ・・・
489デフォルトの名無しさん:2010/07/30(金) 23:52:38
マクロ名からしてラベル作ってるんじゃね?
490デフォルトの名無しさん:2010/07/31(土) 00:02:41
>>488
いやLinuxでなくてもGCCは使える

っていうか、プリプロセッサの出力、というだけなら
機能を持たないC/C++コンパイラは皆無だろ。
cppを別途持っているかは別として
491デフォルトの名無しさん:2010/07/31(土) 00:31:27
Linux固有のヘッダファイルが1つでもインクルードされてたらアウトですよ。
492478:2010/07/31(土) 00:32:17
>>490
というかTOPPERSで実際にどのようにマクロが使われているのを調べるにはGCCが使えるだけではダメなんです。

cfg,chkというTOPPERS独自のバイナリプログラムがアプリケーションの設定ファイル*.cfgを参照して
kernel_cfg.cとkernel_chk.cを生成するんです。
kernel_chk.cが実際の使用例になるのですが、これを生成するにはLINUXが必要なんです。

手元のMacOSX(FreeBSDベース)だと生成できなくて・・・
493478:2010/07/31(土) 00:36:13
というわけで、来週会社に行ってkernel_chk.cを入手するまでこの件は保留させて下さい
みなさんお騒がせしました
494デフォルトの名無しさん:2010/07/31(土) 00:39:45
>>492
そういう状況では、さすがにスレ違いですね。
空きマシンにUbuntuなどをインストールして
Linux環境を構築する以外に、抜け道はないと思います。
495デフォルトの名無しさん:2010/07/31(土) 01:32:24
JSPならcygwin+gccのクロス環境がある。
Macは知らんけど。
496デフォルトの名無しさん:2010/07/31(土) 07:37:26
VMWARE とかで Linux を導入すると楽かも
497デフォルトの名無しさん:2010/07/31(土) 09:49:46
TOPPERS固有の、コンフィギュレータまわりかメタデータか何かを生成するためのコードでしょ。
TOPPERSのソースコードの質問をTOPPERSのメーリングリストでしてはいけない理由がわからん。
498デフォルトの名無しさん:2010/07/31(土) 10:18:06
質問の意図はasm自体がよく分かっていないってことでは?
499デフォルトの名無しさん:2010/07/31(土) 10:21:44
>>498
>>479に書いてあるし、>>483を見る限り理解してるでしょ。
500デフォルトの名無しさん:2010/07/31(土) 10:46:48
つーかメーリングリストが嫌ならOS板にスレがあるからそっちで聞け
501デフォルトの名無しさん:2010/07/31(土) 15:53:56
GCCで文字コードをunicodeで
やるにはどうしたらできますか?
502デフォルトの名無しさん:2010/07/31(土) 16:03:57
「やる」とはどういうことか定義してくれ。
503デフォルトの名無しさん:2010/07/31(土) 16:08:57
unicode文字列をwstringにインプットするにはどうやりますか?
504デフォルトの名無しさん:2010/07/31(土) 18:00:12
>>503
wstring s = L"あいうえお";
これで何か不満か?
505デフォルトの名無しさん:2010/07/31(土) 18:52:41
いいえ、それはなにか設定が無いと出来ないから
教えてください。
506デフォルトの名無しさん:2010/07/31(土) 20:24:39
507デフォルトの名無しさん:2010/08/01(日) 01:29:14
オプションで -finput-charset と -fwide-exec-charset に文字コードを指定すればいいかもね。
gcc をビルドするときに iconv がリンクされていない場合には使えないけど。
あと、ライブラリ側も貧弱なことがある。
508デフォルトの名無しさん:2010/08/01(日) 23:30:53
>>505
できないというなら、やってみてどうなったのか言ってみろよ。
509デフォルトの名無しさん:2010/08/02(月) 09:10:37
4.5.1
510478:2010/08/02(月) 21:14:16
自己解決
>>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
#errorの行に到達したら即座に処理を停止するオプションとかってありますか?
何がしたいのかというと,コンパイル時に-Dオプションでパラメタを与えていて
パラメタを書き忘れた場合にずらずらと大量のエラーが表示されるのを防ぎたいのです.

#ifndef 〜
#error 〜〜〜 <-- ここに到達したら即座に停止する
#endif
512デフォルトの名無しさん:2010/08/05(木) 01:25:32
>>511 いや、それだけで停止するだろ。
513501:2010/08/05(木) 12:46:21
4.5で
wstring=u"あいう"とやったらエラーになりました
uをLに変えてもエラーになりました。
const char*=u8"あいう"とやったらエラーにならないけれど
文字コードはSJISでした。
ユニコードにするにはどうしたらいいですか?
514デフォルトの名無しさん:2010/08/05(木) 19:24:48
GCCはあきらめろ
Visual C++マジおすすめ
515デフォルトの名無しさん:2010/08/07(土) 13:26:30
もしもGCCでユニコードがつかえるときのためには
strings<T>のTを変えるだけで出来るようにプログラムを作っておけばいいんですか?
それとも他に何か必要ですか?
516デフォルトの名無しさん:2010/08/07(土) 16:05:10
必要ありますん
517デフォルトの名無しさん:2010/08/07(土) 16:08:22
ありますんとは否定形ですかそれとも肯定形ですか?
518デフォルトの名無しさん:2010/08/07(土) 18:27:20
曖昧形です
519デフォルトの名無しさん:2010/08/08(日) 00:22:29
520デフォルトの名無しさん:2010/08/18(水) 02:39:23
>>513
--input-charsetと--exec-charsetは指定している?
Cygwin 1.7で動いているよ。
521デフォルトの名無しさん:2010/08/31(火) 00:45:42
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)
522521:2010/08/31(火) 21:34:15
自己解決しました。
XML関係のプログラムをコンパイルするため、STLportのヘッダーファイルを変更したのですが、
その時STLport自体を再ビルドしていなかったのが原因でした。
523デフォルトの名無しさん:2010/10/01(金) 20:53:32
リンカスクリプトの中で#ifdef〜#endifみたいなことをやる方法はありますか?

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

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

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

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

以下の所とエラーの表示内容は同じで
ttp://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
組み込みソフトの開発に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を
許可しているのか腑に落ちません。

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

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

また、クロスコンパイラだけでなくネイティブ(i686-pc-cygwin-gcc)でも同様の現象を
確認しています。
532デフォルトの名無しさん:2010/10/05(火) 15:18:59
>>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じゃない関数もインライン展開してしまうのは、確かにちょっと腑に落ちませんね。
533530:2010/10/05(火) 16:18:19
>>532
早速のレス、ありがとうございます。

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

それにしても、>532の最後のjmpは秀逸だな。
535デフォルトの名無しさん:2010/10/05(火) 17:45:57
そう?
536530:2010/10/05(火) 17:57:06
>>534 レス、ありがとうございます。

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

ChangeLogでは見つけることができませんでしたが、コメントの
/* Inlining of functions reducing size is a good idea regardless of them
で検索して下記を見つけました。
ttp://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
気が向いたら、bugzillaかpatch-mlに報告しとけばいいかも
540デフォルトの名無しさん:2010/10/15(金) 01:50:36
なぜgccってcluster openmp未サポートなんですか?
バカなの?技術力ないからなの?
541デフォルトの名無しさん:2010/10/15(金) 01:51:59
openmpが嫌いとか?
542デフォルトの名無しさん:2010/10/15(金) 07:55:15
コンパイラの領分じゃないと考えてるんじゃないの?
543デフォルトの名無しさん:2010/10/15(金) 08:19:41
>>540
gmp
544デフォルトの名無しさん:2010/10/15(金) 10:52:16
>>541
OpenMP自体は実装してるでしょw

Clusterの方はIntelの(R)だし、
Intelのコンパイラで使えるから、
やる気のある人が出にくいんじゃないの?
一応TODOに入ってるみたいだけど。
545デフォルトの名無しさん:2010/10/15(金) 11:57:38
あ、gompのことか
546デフォルトの名無しさん:2010/10/15(金) 23:30:48
てst
547デフォルトの名無しさん:2010/10/16(土) 01:21:00
>>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
(´・ω・) patch が出てるようだけど、マージされることを期待して取りあえず次の定期リリースまで放置〜
549デフォルトの名無しさん:2010/10/19(火) 05:09:23
マージされなかった・・・(´;ω;`)
とりあえず disable-lto & CFLAGS へのオプション無し(-O2 とかやると error になった)で一応ビルドは出来た(gcc-4.6-20101016 rev.165566)
550デフォルトの名無しさん:2010/10/20(水) 06:39:46
lto-pluginで失敗するのを回避する方法としては
sys/wait.hをコメントアウトして
WIFEXITED(status)
WEXITSTATUS(status)
をmingw用のを作れば、コンパイルは通りそうだけど
(´・ω・)にはわかんないかな?
551デフォルトの名無しさん:2010/10/20(水) 09:39:33
何か変なのが棲み付いてるな……
552デフォルトの名無しさん:2010/10/20(水) 19:46:23
>>550
(´・ω・)レスありなと
取りあえず msys のを参考に wait.h を作成して対応しますた
一応 build は出来た・・・動作は未確認・・・

4.5.x は特に wait.h 対策しなくても build 出来たのに
4.6.x は開発途中だからなんかな(´・ω・`)

最近、Core2 & i の最適化パッチが投げ込まれて、今後も+(0゚・∀・) + ワクテカ +
553デフォルトの名無しさん:2010/10/25(月) 23:09:39
>>552
とりあえずおまえはコテつけろ、(´・ω・)をあぼーんすると他で支障が出るだろ
554デフォルトの名無しさん:2010/10/27(水) 10:08:21
>>553
貴様もコテつけろうぜえ
555(´・ω・):2010/10/27(水) 23:35:43
>>553
(´・ω・)シネョ、カス
556デフォルトの名無しさん:2010/10/27(水) 23:43:26
>>553-555
スレの内容に関係ないから、ケンカするなら他所でやれ。
557デフォルトの名無しさん:2010/10/28(木) 08:11:52
>>556
スレの内容に関係ないレスすんな!どっか逝け基地害
558デフォルトの名無しさん:2010/10/28(木) 09:29:54
>>557
スレの内容に関係ないレスにレスすんな!どっか逝け基地害
559(´・ω・) ◆e9bOsFqMug :2010/10/28(木) 14:33:01
(´・ω・)コテつけたよ
560デフォルトの名無しさん:2010/10/28(木) 14:36:43
自己紹介も
561(´・ω・) ◆DPjwQhNza. :2010/10/28(木) 15:03:33
私です!!!!!
562デフォルトの名無しさん:2010/10/30(土) 04:42:03
識別子のunicodeとか\uXXXXサポートとか今どうなってるの?
563デフォルトの名無しさん:2010/11/21(日) 17:37:27
おぉーい、誰かいます?
こちらへ誘導していただいたので来ました。

gcc(4.5.1)のc-parser.cだけを利用しようと思っています。
で、VC++でコンパイルしているんだけど、
gimple
という構造体の宣言、この構造体が未定義のようでエラーが出てます。
gccのフォルダ丸ごと検索してみたけど、自分の能力では見つからず。。。
例えば、
gimple stmt;
というステートメントでエラーが発生してます。
どうやりゃ解決できるんでしょうか?
おながいします。

やったこと:
VC++の新規プロジェクトに、パーサのコードおよび関連ヘッダを入れてコンパイル。
コンパイラにヘッダがないと言われれば、追加してあげる。
564デフォルトの名無しさん:2010/11/21(日) 18:17:56
gcc/gimple.h
gcc/vec.h
565デフォルトの名無しさん:2010/11/21(日) 18:39:26
gimple_statement_d
が本体みたいだけど
566デフォルトの名無しさん:2010/11/22(月) 06:21:22
>>564
>>565

ありがと。何とかなりました。

現在、bitmap.hにて、同様に今度は
bitmapという構造体(識別子)がないとのたまわれてます。
確かにないし。
どうすればこのエラーを解決できるんですか?
567デフォルトの名無しさん:2010/11/22(月) 10:16:22
そうやって芋づる式に足りないものを追加していくと
最終的にgcc全体を取り込む結果になったりして
568デフォルトの名無しさん:2010/11/22(月) 13:02:35
>>567

(w
いやさすがにそれはないなぁ
でも、やりたいことは、

Cからデータフローグラフを作る

なので、パーサをおさえた後が大変、
というのは自覚してまふ
#というかDFG生成のフリーウェアあったな
569デフォルトの名無しさん:2010/11/22(月) 13:40:57
564ですが…

>>566
GTY/gengtypeは理解したの?
gimple.hで出てきたでしょ。
doc/gty.texi, doc/gccint.texi読まないと、gccの改造なんて無理。
パーザ借りるだけだとしても。

>>568
それこそgimple使えば簡単なのに…
そのためにあるgimpleなんだけど…
570デフォルトの名無しさん:2010/11/22(月) 14:28:21
つーか、Doxygenでよくね?w
571デフォルトの名無しさん:2010/11/22(月) 17:06:35
Doxygen?
データフロー解析するんでしょ?
572デフォルトの名無しさん:2010/11/22(月) 19:59:33
>>566
おまいはとりあえず、gccをビルドしたときのログを全部残しておいて、
関連するファイルをコンパイルしている行をコピペして-Eオプション追加して
走らせてみろ。何がどうインクルードされてマクロ展開されるか全部出てくる。
573デフォルトの名無しさん:2010/11/22(月) 20:21:10
>>563
なんでgccでコンパイルせずにVC使うの?それだけでかなり難易度上がってるとおもうが。
失礼なこと言うようだが、あなたには難しすぎることにように見えます。

>>572
そんな面倒なことしなくても、-save-tempsオプションつけてビルドすればいいんでない?
574デフォルトの名無しさん:2010/11/22(月) 21:26:55
bitmap_head_def?
c-parser.cってだだの入り口でしょ
575デフォルトの名無しさん:2010/11/27(土) 13:36:58
UNIXのコンパイラってなんでアセンブラのソースを生成するの?
VCみたいに直接バイナリ吐いて必要になったらときに逆汗した方が速くない?
576デフォルトの名無しさん:2010/11/27(土) 13:40:02
gccの場合、アセンブラが中間言語になってます。
ニーモニックがUNIX形式。
ただし全てのコンパイラ@UNIXがこのスタイルなわけではありません。
ちなみに現代のコンパイラでアセンブラが消費する時間は些細なものです。
577デフォルトの名無しさん:2010/11/27(土) 13:45:30
gccとbinutilsで似たようなコードを保守管理するのは二度手間じゃない?
実はマンパワーが相当有り余っててそんなの全然問題じゃないとか?
578デフォルトの名無しさん:2010/11/27(土) 13:52:44
gccだけでカンファレンスが開かれる状況です。
579デフォルトの名無しさん:2010/11/27(土) 13:53:31
>>575
VCが逆アセンブルするの? んな馬鹿な。
リスト出力オプションを指定したときにそんな胡乱なことをするとでも思っているのか?
580デフォルトの名無しさん:2010/11/27(土) 13:53:53
それからgccはアセンブラを抱えてません。(ローダも)
通常の環境ではbinutilsを使ってます。
581デフォルトの名無しさん:2010/11/27(土) 18:13:45
gas経由でやってるのはinline asmを処理するのが楽だからじゃね。
582デフォルトの名無しさん:2010/11/27(土) 18:56:26
GCC はインラインアセンブラを使ってる箇所も最適化の対象にしてる。
そのままアセンブラに丸投げしているわけじゃない。
583デフォルトの名無しさん:2010/11/27(土) 20:02:36
中身の最適化はしてないでしょ。
引数に関しては最適化してるけど
584デフォルトの名無しさん:2010/11/27(土) 23:21:02
LLVMのコンパイラclangは直接 .o 吐けるようになったぞ。
ていうかとうとうbinutilsの置き換えにも走りだした。

スレチスマソ
585デフォルトの名無しさん:2010/11/27(土) 23:36:38
arch固定だからかな
586デフォルトの名無しさん:2010/11/28(日) 03:48:09
そもそもアセンブり言語っていらなくない?
人間が計算機と比べてバカだからしょうがなく作ったものなのに
GCCとbinutilsのインターフェイスになってるとかどうも違和感ある
587デフォルトの名無しさん:2010/11/28(日) 04:15:57
gccにgasを取り込むことはしないと思うけど
gas経由でやってるから、inline asmが使いやすくなってる感じだけどね
588デフォルトの名無しさん:2010/11/28(日) 08:51:44
>>583
するよ。
589デフォルトの名無しさん:2010/11/28(日) 08:57:13
>>588
どんな書き方だとしますか?
590デフォルトの名無しさん:2010/11/28(日) 08:58:21
もしや、%0とかのことかな?
591デフォルトの名無しさん:2010/11/28(日) 23:16:45
>>586
なくしてもいいことないしね。
592デフォルトの名無しさん:2010/11/28(日) 23:18:17
>>584
LLVMはそもそもVMの中間言語があるじゃない。
593デフォルトの名無しさん:2010/12/09(木) 17:09:04
GCC-4.5.2 RC が出たお
594デフォルトの名無しさん:2010/12/09(木) 17:48:18
RCは触る気になれんとです
595デフォルトの名無しさん:2010/12/12(日) 21:02:45
gcc -E -dM hogehoge.c ってやるとマクロ定義が出てくるんだけど、
#define HOGE 1
#define PIYO HOGE+1
こんな感じで値は展開されてない。これを
#define HOGE 1
#define PIYO 1+1
こんな感じに展開してくれるオプションってないん?
596デフォルトの名無しさん:2010/12/12(日) 21:11:26
そんな処理はしていないんだから当然だ
597デフォルトの名無しさん:2010/12/12(日) 21:18:12
cpp通せばいいんじゃね
598デフォルトの名無しさん:2010/12/12(日) 21:30:45
>>596
あー、実際に使うときに展開するのか orz
>>597
ど、どうすれば

もしかして、gcc -E -dM で出てきた結果を実際に使ってもう一回プリプロセッサに通せばいいのか
#define HOGE 1
#define PIYO HOGE+1
HOGE;
PIYO;
↓ gcc -E
1;
1+1;
599デフォルトの名無しさん:2010/12/12(日) 21:40:00
展開された結果としてコンパイルされるんだから無問題だと思うんだが、
展開された結果のソースを欲しがる理由が想像できない。
600デフォルトの名無しさん:2010/12/12(日) 22:12:18
>>599
質問者じゃないけど俺は長ったらしいマクロを書いてコンパイル通らないときに重宝してる
BOOST_PPとか-Eないとデバッグ不能だotx
601デフォルトの名無しさん:2010/12/12(日) 22:14:36
>>599
こんなID的なものの実際の数値を知りたいとき
#define MSG_ID_BASE 1000
#define MSG_ID_HOGE (MSG_ID_BASE+1)
#define MSG_ID_PIYO (MSG_ID_BASE+2)

>>598のやりかたで一手間かかるけどいけそうだ。おまいらサンクス
602デフォルトの名無しさん:2010/12/12(日) 22:43:01
603602:2010/12/12(日) 22:45:41
失礼、ボタンを押し間違えたです。

なるほど、そうすると#warning辺りにprintf的出力でマクロ展開後の値を出力できる
機能があると便利になりそうですね。
604デフォルトの名無しさん:2010/12/13(月) 22:14:13
↓みたいなのは出来そうだが

#define PRAGMA( x ) _Pragma( #x )
#define MESSAGE( x ) PRAGMA( message( x ) )
#define A 1
#define B (A + 1)
MESSAGE( B ) // (1 + 1) と展開

出て来るのは 2 でなく (1 + 1) だからいまいちかもしれんが
605デフォルトの名無しさん:2010/12/14(火) 09:27:35
gccを使ってcygwin下で動くアプリを開発する場合、gdb以外にどのようなデバッガが
利用できるのでしょうか?
ワンキーでステップ実行しながら、これに連動して対応するソースコードの(前後含めて)表示や、
複数の変数・構造体のメンバーの値を連動表示できるような機能のあるもの(必然的にGUI?)を希望。
606デフォルトの名無しさん:2010/12/14(火) 10:37:53
つ Cygwin + MinGW + GCC 相談室 Part 5
http://hibari.2ch.net/test/read.cgi/tech/1269400706/
607デフォルトの名無しさん:2010/12/17(金) 17:34:44
(´・ω・) gcc-4.5.2 来た
608デフォルトの名無しさん:2010/12/17(金) 23:04:49
いまさらですけど CentOSにはboostがデオフォで入ってたのね。
知らんかった。
今後よろ
609デフォルトの名無しさん:2010/12/22(水) 13:34:24
>>607
GJ
610デフォルトの名無しさん:2010/12/30(木) 16:22:52
SPEC CPU2006で、最近のOpeteronマシンの計測結果みると
x86 Open64 Compiler Suiteというコンパイラが使われていますがこれは何なの?
GCCとは別物?
611デフォルトの名無しさん:2010/12/30(木) 16:24:13
612デフォルトの名無しさん:2011/01/01(土) 11:31:51
なんかmlにうんこが…
613デフォルトの名無しさん:2011/01/01(土) 14:47:39
(´・ω・)何あれ?
614デフォルトの名無しさん:2011/01/03(月) 12:24:22
TDM mingwはなんでTDM GCCにかわっちゃったのかね。
615デフォルトの名無しさん:2011/01/08(土) 07:52:05
gcc 4.6.0、どうよ?
616デフォルトの名無しさん:2011/01/08(土) 13:34:06
まだ、リリースされてないよ。
617デフォルトの名無しさん:2011/01/09(日) 03:45:18
int APIENTRY WinMain
618デフォルトの名無しさん:2011/01/09(日) 05:23:23





ゲーツェーツェー




619デフォルトの名無しさん:2011/01/09(日) 06:06:35
ぐにゅしーこんぱいらー




と呼ぶ人がいました

実際C(C++)以外で使ってる人に出会ったことないけどさ
620デフォルトの名無しさん:2011/01/09(日) 08:29:20
go
621デフォルトの名無しさん:2011/01/09(日) 08:35:17
>>619 むかしはそうだった
622デフォルトの名無しさん:2011/01/09(日) 10:04:34
コマンドとしてのgccは今でもそうじゃね?
623デフォルトの名無しさん:2011/01/09(日) 15:24:42
CPP CXX CC

違いがサッパリわからん
624デフォルトの名無しさん:2011/01/11(火) 07:24:49
++を斜めにしてXXとかよく考えるよな
625デフォルトの名無しさん:2011/01/12(水) 23:48:02
>>601
遅レスだが、過去スレで同じ質問したことがある。

$ cat hoge.h
#define FOO 1
#define BAR FOO+1
$ cat hoge.c
#include "hoge.h" // その調べたいマクロが入ってるヘッダやコードをとにかくincludeするダミーコードを作る
int main(void) { return 0; }
$ gcc -g3 -fno-eliminate-unused-debug-types -fno-eliminate-unused-debug-symbols -o hoge hoge.c
$ gdb hoge // ダミーバイナリをロードしてgdbに値を出させる
(gdb) b main
(gdb) run
(gdb) p FOO
$1 = 1
(gdb) p BAR
$2 = 2
(gdb)

これでどうだろう?ただし大き目のプログラムはチョー巨大になる。
626デフォルトの名無しさん:2011/01/13(木) 10:12:36
>>625
その方法を手元にある以下の組み合わせで試したところ
p FOO が No symbol "FOO" in current context. となってしまいました。

gcc version 4.2.1 (Apple Inc. build 5664)
GNU gdb 6.3.50-20050815 (Apple version gdb-1510)

私がやり方を間違えているか、gccやgdbのバージョンに依存する方法だったりしますでしょうか?
627デフォルトの名無しさん:2011/01/13(木) 10:50:43
いま -march って意味あるの?
俺んち core2duo とかなんだけど。
628デフォルトの名無しさん:2011/01/13(木) 10:55:33
>>626
runして途中で止めた状態でそうなる?
未実行のロードしただけだとこっちでもそうなるけど、実行中の
コンテキストだとちゃんと見える。
629デフォルトの名無しさん:2011/01/13(木) 23:26:25
>>627
-march=core2とするより-march=i686とするほうが速かったりはするが
意味が無いわけではない
630デフォルトの名無しさん:2011/01/14(金) 01:49:29
>>629
あ どもです。
i686 で言いわけね。
最近の COREi7 とかもi686でいいのですか?
このオプションがわかるアプリつくりタイです。

$ chkmarch
core2duo:i686
$
みたいなのありますか?
631デフォルトの名無しさん:2011/01/14(金) 01:56:42
uname -m
632デフォルトの名無しさん:2011/01/14(金) 02:27:10
>>631
ぐぇ これでいんですか?
知りませんでした。orz
633デフォルトの名無しさん:2011/01/17(月) 13:39:54
./configure
するときに中で使ってるでしょ
634デフォルトの名無しさん:2011/01/17(月) 13:57:27
俺の PC で「なか」を変換すると「膣内」が第一候補なんだけど、これってどう思う?
635デフォルトの名無しさん:2011/01/17(月) 14:13:05
むしろなぜ下ネタはどんなにつまらなくても面白いのかの方が気になる。
636デフォルトの名無しさん:2011/01/17(月) 14:22:35
>>634
スレ違いだと思います。
637デフォルトの名無しさん:2011/01/17(月) 17:24:00
産婦人科の先生だと思います。
638デフォルトの名無しさん:2011/01/19(水) 21:25:56
へえ
639デフォルトの名無しさん:2011/02/10(木) 12:10:04
華麗に保守
640デフォルトの名無しさん:2011/02/24(木) 22:19:58.35
http://www.phoronix.com/scan.php?page=article&item=intel_avx_gcc&num=1
SandyBridgeのAVX拡張
パッチ対象のGCCが遅くなってる、、、
641デフォルトの名無しさん:2011/02/24(木) 23:05:42.39
x32いらねー
642デフォルトの名無しさん:2011/02/25(金) 18:55:32.37
>>640
GCCでは当分使わない方がいいってこと?
643デフォルトの名無しさん:2011/03/01(火) 11:33:24.32
K&Rスタイルでコンパイルするオプションってありますか?
規定の実引数拡張をK&Rスタイルにしたいので。
644デフォルトの名無しさん:2011/03/01(火) 12:13:41.55
-traditionalでいいんでないかい
645デフォルトの名無しさん:2011/03/01(火) 13:59:04.71
>>643
無理。
>>643
最近はcppの標準化以前の機能くらいしか残ってないはず。
646デフォルトの名無しさん:2011/03/03(木) 18:53:04.85
>>640
GCCのx86-64の数学ライブラリ遅すぎ
x86-64ではSSE2で演算するするのとSSE2が超越関数などの命令を持ってないから
それらがライブラリ依存になるからかな
647デフォルトの名無しさん:2011/03/07(月) 02:33:49.36
超初歩的な質問なんですけど
最近Linuxでプログラム初めてg++でprintf("Hello World!");ってやってみたんですけど、表示されません
gdbで実行すると出るんだけど、そういうもんなんですか?
コンソールなんだからgdb使わなくてもHello World!って表示されてくれよと思うのですが
648デフォルトの名無しさん:2011/03/07(月) 02:40:27.84
"Hello World!\n"とか
649デフォルトの名無しさん:2011/03/07(月) 03:28:10.22
>>648
試してみましたが、ダメでした。
650デフォルトの名無しさん:2011/03/07(月) 03:31:11.80
とりあえず、環境とソースとコマンドラインを全て書こうか
$ uname -rm
$ g++ --version | head -1
$ echo ${LD_LIBRARY_PATH}
651デフォルトの名無しさん:2011/03/07(月) 03:38:17.16
\nもう一ついるんかな?

端末(tty)のバッファリングだっけ?
stty raw で、無効になったと思う
http://archive.linux.or.jp/JM/html/GNU_sh-utils/man1/stty.1.html
652デフォルトの名無しさん:2011/03/07(月) 03:41:38.99
653デフォルトの名無しさん:2011/03/07(月) 03:51:56.67
http://archive.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html
termios.hに、cから直接端末設定する関数もあるけど、めんどくさい。
654デフォルトの名無しさん:2011/03/07(月) 04:22:30.15
>>650
2.6.18-194.32.1.el5 x86_64
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
出力なし

#include <iostream>

int main()
{
printf("Hello World!\n\n");

return 0;
}

g++ test.cpp -o test
655デフォルトの名無しさん:2011/03/07(月) 04:27:37.68
わかった
testにしているのが悪いんだよ
testはコマンドとして存在している
$ which test
656デフォルトの名無しさん:2011/03/07(月) 04:32:59.83
というかカレントディレクトリに存在するコマンド実行するときは ./test とかした方がよい
657デフォルトの名無しさん:2011/03/07(月) 05:32:06.74
というか(Linuxなら)カレントディレクトリにしか存在しないコマンドは./を付けないと動かないんじゃ
658デフォルトの名無しさん:2011/03/07(月) 05:53:17.85
そんなことはない
659デフォルトの名無しさん:2011/03/07(月) 08:04:58.49
PATH に . を含めればできるが、やってはいけない。
たとえばダウンロードしたアーカイブを展開した中のディレクトリで、意図しないコマンドを
実行させられるかもしれない。
660デフォルトの名無しさん:2011/03/07(月) 13:27:00.65
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘printf’ was not declared in this scope
661デフォルトの名無しさん:2011/03/07(月) 13:37:29.95
でっていう
662デフォルトの名無しさん:2011/03/07(月) 20:13:24.29
>>659
だよなぁ。
msys 環境だとデフォルトで PATH の先頭にカレントディレクトリが付いててブチ切れそうになったわ
663デフォルトの名無しさん:2011/03/07(月) 21:05:58.26
/usr/local/bin/a.out
664デフォルトの名無しさん:2011/03/07(月) 22:18:16.19
動的ライブラリやjavaのクラスパスでも同じ問題あるから、
駄目なんだけど対応するのめんどくさい
http://slashdot.jp/security/article.pl?sid=10/08/27/0822219
665647:2011/03/08(火) 00:46:04.66
$ g++ test.cpp -o hello
$ hello

としてもダメでした。

$ ./hello

で、しっかりHello World!と出力されました。
結局、Linux的にはどのように実行するのが正しいんですか?
上記のようにドット付けて実行するのはダメなんですか
わざわざ絶対パスで実行するんですか?
666デフォルトの名無しさん:2011/03/08(火) 00:47:00.27
./helloでいいよ。
PATH環境変数に.を追加するなんてことはするべきでない。
667デフォルトの名無しさん:2011/03/08(火) 00:55:58.56
PATHって環境変数のPATHのことでしたか。実行するときのパスだと勘違いしてました。
わかりました。ありがとうございました。
668デフォルトの名無しさん:2011/03/08(火) 16:10:45.73
LinuxはDOSと違って、「実行ファイルが先」に認識するもんじゃない。
ファイルであると認識させたいときはパスが必要。

よって、カレントディレクトリにあるもの実行したいときは
"Fuckin' Macin'" ではなく、 "./Fuckin' Macin'" でないとダメ。

融通が利かんアスペルガー相手にしてると思えばよい
669デフォルトの名無しさん:2011/03/08(火) 16:13:21.78
最初の二行からして意味不明
670デフォルトの名無しさん:2011/03/08(火) 16:16:43.33
特にMS-DOSは
「カレントディレクトリにその名前の実行ファイルやフォルダがあるかないか先に探してから」
「なければ環境変数に記された場所の下」

って親切な設計だが、Linuxはそんな配慮なんかしない。
671デフォルトの名無しさん:2011/03/08(火) 16:55:49.62
親切というか…大間抜けな設計だよね。
最近もライブラリパスで問題になったばかり。

http://technet.microsoft.com/ja-jp/security/gg557854
http://blogs.technet.com/b/jpsecurity/archive/2011/01/20/3381400.aspx

safe search modeってw
今までのはunsafeだったわけで。
何でこんなバカな設計が出来るのか分かりません。
672デフォルトの名無しさん:2011/03/08(火) 17:18:04.29
最初からマルチユーザー前提で設計されたものと、
シングルユーザー前提で基本設計がされちゃったものの違い、だろ単に。

それを「親切」とか言っちゃうのははっきり言ってどうかとだが。
673デフォルトの名無しさん:2011/03/08(火) 17:25:48.86
それ、シングルマルチ関係なくネ?
674デフォルトの名無しさん:2011/03/08(火) 19:14:00.35
変に小細工しないでUNIX仕様そのままにしとけばよかったのにね
675デフォルトの名無しさん:2011/03/08(火) 19:17:12.66
祖先をたどっていった CP/M には階層ディレクトリなんてなかったから、
そんときの動作を引き継いでるんでしょ。
676デフォルトの名無しさん:2011/03/08(火) 20:15:43.69
まあ20年前のバイナリが今でもちゃんと動作するという点は
評価すべきだと思う
677デフォルトの名無しさん:2011/03/08(火) 20:32:00.37
DOSのファイルシステムじゃ、
実行ファイルの区別がつけられなかったから、拡張子に.com付けてたろうが
678デフォルトの名無しさん:2011/03/08(火) 20:58:54.06
command.com
679デフォルトの名無しさん:2011/03/08(火) 21:00:44.91
>>676
とりあえず動いてるがそれは表面的な所だけで
ファイル名にスペース含められなかったり
ロングファイルネームが使えなかったり
2GB以上のファイルにアクセスして壊したり
そのまま使ったら色々トラブルぞ
680デフォルトの名無しさん:2011/03/08(火) 21:04:06.54
なにその無理矢理な理由は
681デフォルトの名無しさん:2011/03/09(水) 04:41:07.62
お前ら、たまにはGCCの話をしろよ…
682デフォルトの名無しさん:2011/03/09(水) 15:35:30.89
ドザはどこでも荒らす基地害
683デフォルトの名無しさん:2011/03/09(水) 16:01:03.08
どさ? ゆさ
684デフォルトの名無しさん:2011/03/10(木) 13:47:25.28
gcc-4.5.2が入ってるディストリある?
685デフォルトの名無しさん:2011/03/10(木) 14:48:37.32
DistroWatchで調べよう
Gentooならなんとかしてくれると思ったら、やっぱりなんとかしてくれていた
686デフォルトの名無しさん:2011/03/10(木) 16:23:45.21
自前でビルドすりゃいいじゃん
687デフォルトの名無しさん:2011/03/10(木) 16:43:47.84
>>685
ありがとう調べてくるよ
Gentooでもまだチルダ付きなんだよね

>>686
最初から入ってるディストリが知りたかっただけだから
688デフォルトの名無しさん:2011/03/10(木) 17:09:23.33
中身が新しめはfedoraじゃないかいな?
689デフォルトの名無しさん:2011/03/10(木) 17:25:20.31
LFS
690デフォルトの名無しさん:2011/03/10(木) 17:41:13.29
まだ問題抱えてないわけじゃないから、
4.4.Xと共存できるやつ選んだほうがいいよ。
その辺調べるより、/usr/localとか/optに自前で作る方が簡単だけどね。
691デフォルトの名無しさん:2011/03/10(木) 17:41:56.75
http://distrowatch.com/search.php?pkg=gcc&pkgver=4.5.2

The following distributions include gcc version 4.5.2:

• AgiliaLinux: 8.0-beta2
• Arch Linux: current
• ArchBang Linux: 2011.02
• Ark Linux: dockyard
• AUSTRUMI: 2.3.0
• Debian GNU/Linux: unstable
• Frugalware Linux: current, 1.4
• Gentoo Linux: unstable, 11.0
• Linux From Scratch: unstable, 6.8
• Lunar Linux: moonbase
• Mageia: 1-alpha1
• Mandriva Linux: cooker
• PLD Linux Distribution: 3.0
• Slackware Linux: current
• Superb Mini Server: 1.5.6
• T2 SDE: snapshot
• VectorLinux: 7.0-beta1
• Zenwalk Linux: 7.0-rc3

安定版ならSlackwareとArchとFrugalwareか
692デフォルトの名無しさん:2011/03/10(木) 17:43:08.57
>>690
知りたいだけって言ってるんだから使うんじゃないんだろう
693デフォルトの名無しさん:2011/03/13(日) 14:46:16.23
使わないで知ることは出来ない
694デフォルトの名無しさん:2011/03/13(日) 20:26:43.40
出来るだろ
695デフォルトの名無しさん:2011/03/19(土) 20:38:54.43
cloogとの依存関係がむずかしくなちゃったね、4.6
696デフォルトの名無しさん:2011/03/20(日) 00:14:07.91
(´・ω・) ClooG は isl or parma どっち使ったらええのん?
697デフォルトの名無しさん:2011/03/20(日) 00:24:29.26
islでビルドでけた。ppl-legacyはこけた、RC
698デフォルトの名無しさん:2011/03/20(日) 00:29:28.87
Current release series: GCC 4.6.0 (changes)
とか公式に書いてあるから4.6が出たのかと思った
699デフォルトの名無しさん:2011/03/20(日) 00:34:45.10
4.7が始まったから、4.6はまもなくでしょ
700デフォルトの名無しさん:2011/03/20(日) 02:45:23.74
2.6.18-194.32.1.el5 x86_64
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)

g++でコンパイルしようとすると、socketとかbindとかの関数は通るんですけど、writeとかcloseがコンパイルエラーになります。
cppをcにしてgccでコンパイルすると通ります。
これはどういうことでしょうか。誰か教えてください。
まさかC++でソケット通信できないということじゃないですよね?
701デフォルトの名無しさん:2011/03/20(日) 02:54:12.48
オーバーロードとか考えたけど、面倒なので再現するソースを見せてね
702デフォルトの名無しさん:2011/03/20(日) 03:39:23.25
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>

int main()
{
    // コンパイルエラーを試すだけなので第一引数はテキトーな値で
    write(0, "Hello World!", 12);

    return 0;
}

$g++ test.cpp -o test
$gcc test.c -o test
703デフォルトの名無しさん:2011/03/20(日) 05:28:45.77
>>702
ヘッダからみてもこれは C のプログラム。
704デフォルトの名無しさん:2011/03/20(日) 06:26:23.02
>>703
そこはC風にやろうがC++風にやろうが関係ないんじゃないですか?
705デフォルトの名無しさん:2011/03/20(日) 08:57:38.97
writeの使い方がおかしいのに、何言ってるんだか?
706デフォルトの名無しさん:2011/03/20(日) 09:28:54.59
エラーメッセージを読まない、あるいは質問時に提示しない人間の頭の悪さが理解出来ない。
707デフォルトの名無しさん:2011/03/20(日) 09:30:00.57
>>697
(´・ω・)情報ありお
ppl-legacy こけるのか・・・
取りあえず parma(0.16.1) でも build(gcc-4.6-20110318) 出来るのは確認した
708デフォルトの名無しさん:2011/03/20(日) 09:52:44.11
エラーが出ますとだけ言ってエラーメッセージを書く知能がない奴にプログラミングは無理だろう
709デフォルトの名無しさん:2011/03/20(日) 09:57:27.86
書けて、エラーが出たら、コンパイラが悪いとか言い出すみたいだけど、最近は
710デフォルトの名無しさん:2011/03/20(日) 12:35:04.57
(´・ω・)う〜ん、cloog-parma(0.16.1) 怪しいかも・・・
しばらく?は isl にした方が良いのかなぁ
ろしあの人もそうしてるみたいだし
711デフォルトの名無しさん:2011/03/20(日) 13:07:35.13
writeなんて低レベルあんまり使わんななぁ。
ソケットでも send と recv だし。
712デフォルトの名無しさん:2011/03/20(日) 14:29:21.08
>702
write()やclose()はunistd.hだったと思うんだ
man 2 write
man 2 close
713デフォルトの名無しさん:2011/03/21(月) 04:07:56.20
>>712
ありがとうございます。コンパイル通りました。
714デフォルトの名無しさん:2011/03/22(火) 08:43:40.50
RC2が出たね。
715デフォルトの名無しさん:2011/03/26(土) 16:36:41.01
(´・ω・)そして、正式版に
716デフォルトの名無しさん:2011/03/28(月) 19:45:31.51
GCC 4.6リリース、Google Goの正式サポートなど多数の変更点を含む
http://sourceforge.jp/magazine/11/03/28/0518233
717デフォルトの名無しさん:2011/03/29(火) 01:38:36.66
CentOS5.5でも4.1.2なんだよなぁ。
なんでこんなに遅れるんだろう。
718デフォルトの名無しさん:2011/03/29(火) 04:52:17.64
>>717
そりゃ .5だからだろう。 五回もマイナーリリースをしたバージョンだから基盤のバージョンは古い。 
6.0で4.4になるよ。 
719デフォルトの名無しさん:2011/03/29(火) 14:08:53.30
>>718
とんとん
720デフォルトの名無しさん:2011/03/29(火) 20:00:24.87
>>717
gcc44 でもいれとけ
721デフォルトの名無しさん:2011/03/30(水) 01:07:46.05
>>720
いや いれればそれでいんだけど。
なんで古いままなのかなぁって。
722デフォルトの名無しさん:2011/03/30(水) 01:20:59.53
>>716
最適化の強化がすげーな。今までとかなり違った結果が出そうだ。
723デフォルトの名無しさん:2011/03/30(水) 23:48:16.88
>>721
> なんで
保守が原則の鳥だから。
遅れてるのではなくもともと新しいのは原則来ない。

Fedora->RHEL->CentOS
724デフォルトの名無しさん:2011/03/31(木) 00:06:27.87
>>723
枯れ を好むって事ね。
確かに C/C++ コンパイルするのには
全然困らないね。
725デフォルトの名無しさん:2011/03/31(木) 00:09:47.47
なんか、本質的な部分をわかってなさそう。
わからなくても使えれば構わないんだろうけど。
726デフォルトの名無しさん:2011/03/31(木) 11:17:32.57
呼び出し規約について質問させてください。
gcc 3.4.5、MinGWを使ってコンパイルしています。

a.c/a.cpp
int __cdecl test(int);
int __stdcall test(int x) { return x };

b.c/b.cpp
int __stdcall test(int);
int __cdecl test(int x) { return x };

上記のようなプログラムを作ってコンパイルしたところ、
a.c b.cでは予期通り
error: conflicting types for 'test'
というエラーが出てくれますが、a.cpp b.cpp はコンパイルが通ります。
-Wallを入れても警告が出ず、mapファイルを見ると
両方とも __stdcall になっているようです。これは何故でしょうか?
また、これらで警告なりエラーなりを出させる方法はあるでしょうか?
727デフォルトの名無しさん:2011/03/31(木) 16:24:52.18
c++だと、同じ名前でもコンパイルすると違う名前になるからでしょ
728デフォルトの名無しさん:2011/03/31(木) 16:28:30.68
>>727
int __cdecl test(int x) { return x; }
int __stdcall test(int x) { return x * x; }
こんな事が出来るってこと?
試してないけど流石にコンパイルエラーじゃない?
729デフォルトの名無しさん:2011/03/31(木) 16:38:01.09
そこまでは知らん。
730デフォルトの名無しさん:2011/03/31(木) 16:39:40.69
extern C
だっけをつけるんじゃあ
731デフォルトの名無しさん:2011/03/31(木) 17:41:01.21
Win特有の話だから、詳しいことは知らないが、
config/**の#define TARGET_OS_CPP_BUILTINS()で
builtin_defineされている。__attribute__に。
gccとg++で挙動が違うってことはないはず。
そもそもミスマッチな属性だし。
732デフォルトの名無しさん:2011/03/31(木) 17:48:50.19
>>728
オーバーロードできるように引数のタイプを符号化して識別子に加えているとかなんとか
733デフォルトの名無しさん:2011/03/31(木) 17:50:38.91
その辺の呼び出し規定はWindows側に合わせるのでは?
cdecl, stdcall属性が付くと。
734デフォルトの名無しさん:2011/03/31(木) 17:59:22.09
>>731
linuxでも__attribte__((fastcall))とか使うだろ。
もっともattributeは関数の宣言部でしか使えず、
定義部で付与してもエラーになるはずだから726のような状況にはならないけど
735デフォルトの名無しさん:2011/03/31(木) 18:54:10.86
名前マングル
736デフォルトの名無しさん:2011/04/01(金) 10:15:09.43
確かに両方共stdcallになっちゃってるよこれ
737デフォルトの名無しさん:2011/04/01(金) 10:19:56.38
名前装飾とアセンブリ出力合ってねえ
ダメだこれ
738デフォルトの名無しさん:2011/04/04(月) 12:47:13.97
Linuxで/proc/statのcpuの各値を取得する関数はありませんか?
/proc/statを文字列として読み込んで処理するしかないのでしょうか?
739デフォルトの名無しさん:2011/04/04(月) 19:57:51.48
文字列解析が出来ないのかいな?
740デフォルトの名無しさん:2011/04/04(月) 22:27:41.03
こういうのってマルチコアの排他ってどうしてるんだろうな。
/proc/stat読んでる間に書き換わったりしないのか?
741デフォルトの名無しさん:2011/04/04(月) 22:55:08.62
syscall としては atomic に読んでる
742デフォルトの名無しさん:2011/04/04(月) 22:56:42.07
ということは1バイトずつreadすると悲惨なことになるのか
743デフォルトの名無しさん:2011/04/04(月) 23:08:55.72
ファイルポインタ新規作成して入れ替えてたら問題ないけど、実装みないと分からない
744デフォルトの名無しさん:2011/04/04(月) 23:10:38.36
>>742
ユーザーランド側がどう処理してるかまではみてないけど,
kernel側はおおむねcopy_to_user()でbufferサイズ分一気にわたしてる
つか, デバドラ関係はドライバー依存だと思うが...
やたらサイズがでかくない限りは一気に呼んだ方が安全だと思うよ
745デフォルトの名無しさん:2011/04/09(土) 00:29:33.45
>>740
もう一回読んで diff 取ってるんじゃね?w
746デフォルトの名無しさん:2011/04/10(日) 08:41:23.03
>>745
diff とってる間に (略
747デフォルトの名無しさん:2011/04/10(日) 13:51:06.92
まぁ、/proc/stat なんていい加減な値しか出ないからなw
748デフォルトの名無しさん:2011/04/14(木) 20:52:24.21
>>745
正解
749デフォルトの名無しさん:2011/04/14(木) 21:37:40.86
収束するまで繰り返さないと
750デフォルトの名無しさん:2011/04/15(金) 16:11:14.36
MinGWは、追加includeパスの設定はどうやればできますか。
751デフォルトの名無しさん:2011/04/15(金) 16:45:14.87
このスレで聞いてるってことは、GCCを使うんだろ?
GCCの追加includeパスの指定の仕方はわかってるんだよな?
752デフォルトの名無しさん:2011/04/15(金) 17:01:02.38
-I
753デフォルトの名無しさん:2011/04/15(金) 17:10:39.80
処理するファイルになんか書いとく・コマンドラインオプションの指定・環境変数の設定くらいしかできることはないだろ。さてどれだ。
754750:2011/04/15(金) 17:34:17.12
あらかじめ設定しておくのは出来ないんですか?
MSVCやBCCは出来るんですが。設定ファイルがあります。
755デフォルトの名無しさん:2011/04/15(金) 17:42:55.96
ありますよ
756デフォルトの名無しさん:2011/04/15(金) 18:00:16.47
MSVCやBCCはIDE、GCCはそうじゃない。
ちなみにMSVCやBCCにも素のコンパイラ部分には追加パスの自動
解決機能はない。
IDEがコンパイル時やリンク時の追加パスを解決してくれてただけで
GCCにはIDEの機能はない。
自分でmakefileを編集する能力がなければ自動生成してくれるIDEを
使いなさい。
757デフォルトの名無しさん:2011/04/15(金) 18:41:53.18
bccはカレントディレクトリにcfgファイル置いといたら使ってくれるような
IDEもプロジェクトの保存時にcfg吐いてくれるので、コマンドラインからも同じ設定でビルドできる
758デフォルトの名無しさん:2011/04/15(金) 19:11:21.40
だから何?
759デフォルトの名無しさん:2011/04/15(金) 19:48:33.46
BCCってBorlandのコマンドラインコンパイラ部分のことだと思ってたけど。
IDE込みならBCB。
760デフォルトの名無しさん:2011/04/15(金) 20:51:53.47
msvc だったらclか
761デフォルトの名無しさん:2011/04/15(金) 21:22:13.10
Borlandの場合はコマンドラインコンパイラの部分だけ別製品として
無償配布しているからIDEつきとで別の名前になってるけど
VC++の場合は無償版でもIDEがついてるから特別な呼称はないはず。

Windows SDKに「Microsoft Visual C++ Compiler」という名前で付属してたり
「Microsoft Visual C++ Toolkit 2003」という名前で単体配布されてたりしたことはある
762デフォルトの名無しさん:2011/04/15(金) 21:26:02.33
いまでもMicrosoft Visual C++ Compilerは、WindowsSDKに付いてるが。
IDEなしで。
763デフォルトの名無しさん:2011/04/15(金) 23:42:20.63
>>762
おまえ国語の成績悪かっただろ
764デフォルトの名無しさん:2011/04/16(土) 00:24:19.78
GCCのIDEはEmacsでって言う奴が大半な気がする
俺はVimだけど
765デフォルトの名無しさん:2011/04/16(土) 00:26:33.61
EclipseとかNetbeansとか重いからAnjutaとかGeanyで十分
766デフォルトの名無しさん:2011/04/16(土) 06:14:00.54
しょうもない回答が多いな

>>754
specsを書けばいい
http://up-cat.net/GCC%25A4%25CEspecs%25A4%25C8%25A4%25CF.html
http://www.mingw.org/node/25
767デフォルトの名無しさん:2011/04/16(土) 07:33:50.94
ぽぽぽぽーん
768デフォルトの名無しさん:2011/04/16(土) 07:54:48.67
>>756
bccは設定ファイルに指定できるし
vcは環境変数に指定できる。
お前が無知なだけ。
769デフォルトの名無しさん:2011/04/16(土) 16:29:55.43
環境変数はともかく、設定ファイルに書くとはセンス悪いなあ。
770デフォルトの名無しさん:2011/04/16(土) 16:33:24.26
だから、その設定ファイルはIDEが吐いてくれて、IDEからのビルドとコマンドラインからのビルドが
同じふうにできるようになってるんだよ
IDE使わないなら-Iでいいじゃん
771デフォルトの名無しさん:2011/04/16(土) 17:08:09.85
>>768
で「誰」がその設定ファイルや環境変数のセッティングをするの?
bccが設定ファイルに「書いてから、また、読む」とか?
vcが環境変数を「設定してから、また、読み取る」とか?


確かに「無知」は「お前だけ」だなwww
772デフォルトの名無しさん:2011/04/16(土) 17:14:53.77
小学生?
773デフォルトの名無しさん:2011/04/16(土) 17:31:16.79
>>771は頭が悪いのか使ったこともないのに偉そうにしてるのか
インストーラやIDEに決まってるだろ
もちろんコマンドラインからしか使わないぜって人はそれらの機構は無視すればいい
774デフォルトの名無しさん:2011/04/16(土) 17:35:53.53
ていうか、必要があれば自分でやるに決まってるでしょ。
IDEしか使わない人はIDE上でしか設定しないし
コマンドラインを使ったことがない人は、
「誰が設定するの?」と書き込んで、心中では
「へへー、俺って鋭い指摘してるな、エヘン」と思っているのかもしれないね。

ていうか、gccのスレにIDEしか使わない人が来ているのが不思議。
使わない、じゃなくて使えない、なのかもしれないけど。
775デフォルトの名無しさん:2011/04/16(土) 17:39:08.20
>>771
で、何が無知で、無知がどうしたって?

>>756
>ちなみにMSVCやBCCにも素のコンパイラ部分には追加パスの自動
>解決機能はない。
776デフォルトの名無しさん:2011/04/16(土) 18:05:30.37
>>774もちょっと読み違えてないか?
777デフォルトの名無しさん:2011/04/16(土) 19:23:22.56
>>775
日本語が理解できないらしいな。

> 素のコンパイラ部分には追加パスの自動解決機能はない。
で、どこに「自動解決機能」があるってか?
778デフォルトの名無しさん:2011/04/16(土) 22:21:41.93
マニュアル調べても分からんから駄目元で質問

リンカスクリプトをいじってるとうまくいかなくてはまることが多いんだけど
エラーチェックが弱いんじゃないかと。
リンカスクリプトのチェックを強力にするオプションはないかね。

例えば、

SECTIONS
{
 hoge :
 {
  aaaa.o(.hoge)
 } > foo
}

aaaa.oに.hogeセクションが無い場合でもエラーにならないけど、エラーにして欲しい。
779デフォルトの名無しさん:2011/04/16(土) 22:34:00.99
まともなリンカーはエラーにはしないでしょうに...
780デフォルトの名無しさん:2011/04/16(土) 23:33:27.39
これをエラーにするとまともなリンカじゃないの?何故?>>779
781デフォルトの名無しさん:2011/04/17(日) 00:08:38.57
素人向きの機能?
リンカーの吐くマップファイルみりゃわかるでしょ
リンカーに頼るより、コンパイルする時に気をつければいいのでは
782デフォルトの名無しさん:2011/04/17(日) 17:18:55.21
Macでそのままconfigureしてmakeしたら
-archオプション認識しない罠
複数ターゲットのクロスコンパイラとしてconfigureしないと
ユニバーサルバイナリ作れないのか・・・?
--targetに何か指定すればいいの? 教えてエライ人!
783デフォルトの名無しさん:2011/04/17(日) 19:28:21.55
crosstool-NG使う?
784デフォルトの名無しさん:2011/04/17(日) 20:43:12.72
>>778
面倒だから試してないけど、こんなんでどうか?

hoge :
{
  __before_hoge__ = .;
  aaaa.o(.hoge)
  __after_hoge__ = .;
} > foo
ASSERT(__after_hoge__ - __before_hoge__, ".hoge not found in aaaa.o");

コンパイルするときに気をつけろってのは愚の骨頂
785デフォルトの名無しさん:2011/04/17(日) 21:35:56.27
セクションの書き方がなんとなく...
786デフォルトの名無しさん:2011/04/18(月) 03:20:21.84
>>783
それヒントにググってたら
MacPortsでもインスコできるようなのでそれでやってみたけど
+universalつけても無理だた・・・
man gccをよく読んでみたら、
「FSF GCCはfatオブジェクトファイルを作らない、つまり、単一アーキテクチャに対するオブジェクトファイルを作る
 AppleのGCCは-archオプションが複数指定されたらfatファイルを作る」
と書かれていたので、Apple自体が提供するGCCじゃないと-archはないのね

-m32でi386、-m64でx86_64でコンパイルする事自体はできるので
別々にビルドしてlipoで繋げないといけないのか・・・めどい
787デフォルトの名無しさん:2011/04/18(月) 05:36:51.38
gccはGPLなんだからアップルがパッチないしは修正gccのソースを出してるはずだろう。
それ見て該当する変更を自分で加えればいいんじゃないか。
788デフォルトの名無しさん:2011/04/18(月) 07:17:47.37
4.2からずっと出てないし
そう単純な変更じゃなさそうなのでもういいよ
Makefileいじって両方出力する方が早そうだ
789デフォルトの名無しさん:2011/04/18(月) 08:14:48.65
AppleはGPL3不全症なのでClangに期待するしかなさげ。
790デフォルトの名無しさん:2011/04/18(月) 08:25:07.33
いずれそうなるだろ
Appleだけじゃなく*BSD系全部
791デフォルトの名無しさん:2011/04/18(月) 09:01:26.94
BSD厨とマカの異常さは特筆に価する *tsuribari*
792デフォルトの名無しさん:2011/04/18(月) 09:56:39.17
でもclangがgcc並になるのは10年くらいかかりそうだな
793デフォルトの名無しさん:2011/04/18(月) 11:06:58.14
まずはpccに移行してるみたいね。
>>788
そだね。
794デフォルトの名無しさん:2011/04/18(月) 19:21:49.18
>>788
lipoつーのもコマンドラインから使えたりしない?
だったら完全自動化もできそう
795デフォルトの名無しさん:2011/04/18(月) 20:07:14.70
>>786
-march= 所与の CPU 用のコードを生成する
796デフォルトの名無しさん:2011/04/18(月) 22:16:31.64
>>784
サンキュー
なるほど参考になります。

一旦完成したldスクリプト/makefileを間違って編集しないためには最適だね。
でもゴリゴリ編集してる間は手抜きしてASSERTせずにはまりそう。
-Wみたいに強制的にチェックするウマい話はないみたいっすね…
797デフォルトの名無しさん:2011/04/18(月) 22:34:09.49
そんな使い方せんにゃらんとは?
798デフォルトの名無しさん:2011/04/19(火) 00:56:32.34
組み込みやっててハードの方もまだ開発中とかだと稀によくある
799デフォルトの名無しさん:2011/04/19(火) 01:02:04.57
妖しいやり方でもしてんのかあ
800デフォルトの名無しさん:2011/04/19(火) 01:20:45.09
むしろ編集してる間こそASSERT重要
801デフォルトの名無しさん:2011/04/19(火) 01:25:06.15
COBOL触ってたときに、assert好きな人がいたな。
mesaの人もassertが好きみたいだけど...
802デフォルトの名無しさん:2011/04/19(火) 01:27:46.63
gccの中だと、assertよりすごいことやってるな
803デフォルトの名無しさん:2011/04/19(火) 01:30:26.48
>>795
-m32 -march=i386
-m64 -march=x86_64
てな感じかな
MacPortsにおまかせしたのに
ppcが使えないのは時代か
別に要らないけど
804デフォルトの名無しさん:2011/04/19(火) 01:32:13.63
ppcはarchが違うから、x86上で動かしたいなら
クロスビルド出来る環境を用意しないと
805デフォルトの名無しさん:2011/04/19(火) 02:56:10.29
>>798
ご名答!
806デフォルトの名無しさん:2011/04/19(火) 10:44:34.54
ハード開発中かどうか関係あるのか?
807デフォルトの名無しさん:2011/04/19(火) 18:51:53.60
プログラマに必要なのは想像力だぞ
808デフォルトの名無しさん:2011/04/19(火) 20:08:37.29
常識で考えてる人が多いよ。
809デフォルトの名無しさん:2011/04/19(火) 21:08:04.36
>>807
妄想力なら負けないよ
810デフォルトの名無しさん:2011/04/27(水) 11:59:03.90
>>806
SDRAMがちゃんと動かなくって、仕方なく内蔵RAMに配置するとか
CSの配線が間違ってて、違う領域にマップされてたとか

まあ、PCしか触らなきゃLDなんて無縁だろうな
811デフォルトの名無しさん:2011/04/27(水) 15:01:18.23
昔はよく書いたけどなあ
812デフォルトの名無しさん:2011/04/27(水) 15:37:38.95
アドレス代わっても.hogeセクションはなくならないし、
>>778は別の理由じゃないか?
813デフォルトの名無しさん:2011/04/27(水) 17:19:40.46
エラーチェックの話だろ。視野が狭いな
そんなんじゃタダのコーダになっちまうぞ
814デフォルトの名無しさん:2011/04/28(木) 01:23:55.64
一般的なエラーチェックなら、ハード開発中は別段関係ない。
815デフォルトの名無しさん:2011/04/28(木) 07:18:34.46
うん。
例えばhogeセクションの綴りを間違えてるケースも考えられる。
fooがもっと複雑で、aaaa.o以外のモジュールも含まれてて、
そのモジュールの間とかでカレントアドレス(".")を使ってラベル定義してたりすると
ラベルのアドレスが意図と違うから、全然関係ない箇所でリンクエラー出したりする。

根本原因でエラーを表示して欲しいというのは当然のこと
816デフォルトの名無しさん:2011/04/28(木) 13:31:52.76
一つの.oに閉じている事なら、リンカ使わなくてもチェックできるし、
またその方がいいだろうしね。
817デフォルトの名無しさん:2011/05/02(月) 10:14:07.66
gccを使っていて、共有ライブラリを作ってある関数を公開したのですが、
うまく公開できずに困っています。
以下のようなオプションを付ければいいと分かったのですが、
-Wl,--version-script,libfoo.map
実際に実行すると以下のようなエラーが出てしまいます。
/usr/bin/ld:libfoo.map:3: syntax error in VERSION script

libfoo.mapは以下の通りです。
{
global: foofunc;
local: *;
};

libfoo.mapをどのように修正したらよいのでしょうか?
818デフォルトの名無しさん:2011/05/02(月) 10:24:44.03
>>817
自己解決しました。

実際のlibfoo.mapは以下の通りでした。
{
global: foofunc0;
global: foofunc1;
global: foofunc2;
local: *;
};

以下のように修正したところ問題なく動作するようになりました。
{
global: foofunc0;
foofunc1;
foofunc2;
local: *;
};

お騒がせいたしました。
819デフォルトの名無しさん:2011/05/05(木) 04:07:02.67
cygwin の gcc-3 (GCC) 3.4.4 を使って
猫でもわかるの最初のサンプルを文字コードをutf8 の ファイル名 foo.cpp で保存して

gcc-3 -mwindows -foo.cpp

してできたファイルを実行させるとタイトルが文字化けするんですが
ファイルの文字コードを sjis にすると文字化けせずに表示できました。

日本語以外の文字も使いたいので utf8 のまま、
出力を文字化けさせずにするにはどうすれば良いですか?
820デフォルトの名無しさん:2011/05/05(木) 06:32:47.97
コンソール画面の文字コードがsjisなんじゃないの?
821デフォルトの名無しさん:2011/05/05(木) 07:11:27.13
A系のAPIにutf8渡してどーする?
822デフォルトの名無しさん:2011/05/05(木) 08:50:46.50
--input-charset=utf-8 --exec-charset=shift-jis とかそんな感じじゃない?
823819:2011/05/05(木) 09:42:56.74
>>820-822…すいません。 URL貼り忘れてました。
http://homepage2.nifty.com/c_lang/sdk/sdk_00.htm
のウィンドウを表示するサンプルです。

このアドレスを >>819 の3行目に入れてたつもりでした…。
824デフォルトの名無しさん:2011/05/05(木) 11:42:01.04
cygwinのmingw系はlibiconv使わないようになってたような
825デフォルトの名無しさん:2011/05/05(木) 21:17:39.80
>>823
NKFをインストールして foo | nkf -w とするのが簡単かと。
826デフォルトの名無しさん:2011/05/06(金) 00:31:57.01
からかってんのか無知晒してんのか分からんけど

>>823
こっちに移動しなさい

Cygwin + MinGW + GCC 相談室 Part 6
http://hibari.2ch.net/test/read.cgi/tech/1304609116/

Win32APIスレが一番適してると思うが見てみたらなんか荒れてんな
827819:2011/05/06(金) 05:25:56.04
>>824
libiconv がないからできないということでしょうか?
>>825
どのnkf使えばよいかわからなかったので
http://www.vector.co.jp/soft/win95/util/se295331.html から落としてきた
nkf.exe を使って試しましたが文字化けしたままでした。
>>826
ただ無知なだけです。
移動します。
828デフォルトの名無しさん:2011/05/06(金) 15:14:39.45
からかってる云々はnkfについてだから君は気にしなくていい
829デフォルトの名無しさん:2011/05/11(水) 17:30:40.70
gccで音楽ファイルを再生するにはどうしたらいいでしょうか?
そのようなコマンドはありますでしょうか?
830デフォルトの名無しさん:2011/05/11(水) 17:33:34.00
プログラム書け
831デフォルトの名無しさん:2011/05/11(水) 17:50:58.73
音の処理はOSによって違う
832デフォルトの名無しさん:2011/05/11(水) 18:46:20.11
取り敢えずphonon使っておけばいい
833デフォルトの名無しさん:2011/05/18(水) 15:52:10.01
gcc 4.6.0 を binutils と一緒にビルドしてみたら
-flto 使ってリンクするとき
 collect2: 'ld' が見つかりません
といわれて失敗するようになった。

-flto 使わなければ普通にリンクできるし、
システムの binutils を使ってるときも大丈夫だったのに……

わけわからん
834デフォルトの名無しさん:2011/05/18(水) 19:57:43.32
-vつけてどこで失敗してるのかもうちょっと調べてみりゃいいじゃん
835デフォルトの名無しさん:2011/05/19(木) 04:28:48.32
普段自前でビルドしたりしない初心者なんですが、gccをビルドする手順をアホかってくらい丁寧に載せているページに心当たりありませんか?
上手く出来ずに丸一日潰してしまいました・・・
836デフォルトの名無しさん:2011/05/19(木) 04:33:15.24
ビルドする環境とarchで検索してみな
837デフォルトの名無しさん:2011/05/19(木) 06:36:44.41
>>836
ttp://www29.atwiki.jp/akcnv/pages/28.html
ttp://d.hatena.ne.jp/syohex/20110122/1295678868
このあたりを参考にして色々やってみてそれらしきものはできたのですが、
home/myname/usr/g++ test.cpp などとやってもコンパイルできません
現状のバージョンからビルドしたバージョンに置き換えるにはどうしたらいいでしょう・・・
838デフォルトの名無しさん:2011/05/19(木) 08:04:03.04
ホームにinstallとかやったことないなあ
OSは?GCCのVerは?x86_64?
839デフォルトの名無しさん:2011/05/19(木) 08:11:48.48
Ubuntu 10.04で32bit環境でgcc4.4.3です
840デフォルトの名無しさん:2011/05/19(木) 08:16:02.45
64bitOS入れればいいじゃん
32bitで64bitの環境を作るのは苦行かも
841デフォルトの名無しさん:2011/05/19(木) 09:42:56.86
>>837
> home/myname/usr/g++ test.cpp などとやってもコンパイルできません

どう失敗するのか書けよw

./configure --prefix=/home/myname/g++ とか
./configure --prefix=/usr/local/g++ とか
./configure --prefix=/opt/g++ とかすれば、普通にインストール出来るだろ。

> 現状のバージョンからビルドしたバージョンに置き換えるにはどうしたらいいでしょう・・・

置き換えはやらないほうがいいね。
併存させた方がいい。置き換える程の知識はないでしょ。

自前の使いたければ、
PATH=/home/myname/g++:$PATH
すればいいだけだし。
842デフォルトの名無しさん:2011/05/19(木) 09:57:48.66
>>841
そういえば書いてませんでした情報の小出し済みません;;
>error trying to exec 'cc1plus': execvp: No such file or directory error:
的なエラー文でした
再ビルドが終わったら指摘していただいた方法を試してみます

EeePCとはいえビルドに6時間とか
843デフォルトの名無しさん:2011/05/19(木) 10:10:49.94
cc1plusの起き場所は実行時に"built-in specs"を参照してるんだけど、
gccをコンパイル時に想定されたところと違うところに置くとそうなる。
--prefixで指定した場所にインストールできてるの?
844デフォルトの名無しさん:2011/05/19(木) 10:11:41.10
>>841
< PATH=/home/myname/g++/bin:$PATH

845デフォルトの名無しさん:2011/05/19(木) 10:26:23.24
フルパスで起動すると失敗する。(PATHが通ってればうまくいくかも)
そういう時はgccをモゴモゴするしか
846デフォルトの名無しさん:2011/05/19(木) 11:13:35.74
gccをモフモフしたいです!!
847デフォルトの名無しさん:2011/05/19(木) 11:15:09.30
パフパフ出来れば最高かも
848デフォルトの名無しさん:2011/05/19(木) 13:39:51.16
ほむほむしたいです。
849デフォルトの名無しさん:2011/05/19(木) 14:46:37.83
>>845
> フルパスで起動すると失敗する。(PATHが通ってればうまくいくかも)

関係ない。cc1plusはもともと$PATHとは無縁なところにある。
850デフォルトの名無しさん:2011/05/19(木) 20:46:16.95
悪い、失敗するのはcmd.exe上だった
851デフォルトの名無しさん:2011/05/19(木) 23:56:26.88
--prefixと違うところに放り込むと失敗するだったかな
852デフォルトの名無しさん:2011/05/20(金) 14:50:13.48
>>834
調べてみた。自前の collect2 に -plugin オプションを指定すると
ld を見つけられなくなるらしい…どうしてだろう

○自前の collect2
[name@localhost toys]$ /home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/collect2 \
-plugin \
/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/liblto_plugin.so
collect2: 'ld' が見つかりません

○システムの collect2
[name@localhost toys]$ /usr/libexec/gcc/x86_64-redhat-linux/4.1.2/collect2 \
-plugin \
/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/liblto_plugin.so
/home/name/usr/gcc/bin/ld: no input files
collect2: ld はステータス 1 で終了しました
853デフォルトの名無しさん:2011/05/20(金) 16:36:56.30
PEX_SEARCH辺りの設定がシステムのと違ってるんじゃないか。
/home/name/usr/gcc/binをPATHにくわえても駄目なの?
854デフォルトの名無しさん:2011/05/20(金) 19:23:33.32
gcc -print-prog-name=ld
855デフォルトの名無しさん:2011/05/20(金) 19:38:05.24
strace
856デフォルトの名無しさん:2011/05/20(金) 21:55:02.78
>>855
strace で見てみたら、
自前の collect2 は ld ではなく ld-new という名前を検索してた。

  ln -s ld ld-new

でうまくいくようになった。(何故 ld-new なのかはわからないけど)

みんなありがとう。
857デフォルトの名無しさん:2011/05/21(土) 03:01:33.48
それって肝心のltoは効いてないんじゃないの?
858デフォルトの名無しさん:2011/05/21(土) 03:12:18.91
ldは少々古くてもltoは効く。
859856:2011/05/22(日) 17:31:59.67
ld は自前の ld だよ。だから古くない。

gcc a.c -> 自前の ld を呼ぶ
gcc a.c -flto -> 自前の ld-new を呼ぶ (ld-new は存在しない)

という状況だった。だから自前の ld のそばに ld-new を作ってみたらうまくいった。
lto のプラグイン自体は存在するし呼び出されている。
860デフォルトの名無しさん:2011/05/22(日) 17:33:19.84
gcc -v
晒してよ
861デフォルトの名無しさん:2011/05/22(日) 18:41:11.39
[name@localhost ~]$ gcc -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/name/usr/gcc/libexec/gcc/x86_64-unknown-linux-gnu/4.6.0/lto-wrapper
ターゲット: x86_64-unknown-linux-gnu
configure 設定: /home/name/usr/src/gcc/gcc-4.6.0/configure --prefix=/home/name/usr/gcc --enable-languages=c,c++,fortran --disable-multilib --enable-lto
スレッドモデル: posix
gcc バージョン 4.6.0 (GCC)

configure する前に gmp/ mpc/ mpfr/ と
binutils-2.21/ から bfd/ binutils/ etc/ gas/ gold/ gprof/ ld/ opcodes/ を
gcc-4.6.0/ の下にリンクしてある。
862デフォルトの名無しさん:2011/05/22(日) 18:45:45.27
binutilsのinstallの仕方がおかしいような?
863デフォルトの名無しさん:2011/05/22(日) 18:58:57.63
ld-newってのはbootstrapで使うから、
buildに失敗してるんだろうね。
864デフォルトの名無しさん:2011/05/22(日) 19:00:17.94
gccのconfigureの時にld-newが検索に引っかかったような?
865デフォルトの名無しさん:2011/05/22(日) 19:12:01.57
>>862
おかしい? http://gcc.gnu.org/install/download.html に従ってやってるつもりなんだけど

>>863,864
ルートディレクトリの下を全検索したら、
(↓/home/name/usr/src/gcc/build はビルド用のディレクトリ)
/home/name/usr/src/gcc/build/ld/ld-new
/home/name/usr/src/gcc/build/stage1-ld/ld-new
/home/name/usr/src/gcc/build/prev-ld/ld-new
が確かに見つかった。
866デフォルトの名無しさん:2011/05/22(日) 19:28:00.54
え、binutilsをビルドしたところで
make install
やってないの?
867デフォルトの名無しさん:2011/05/22(日) 19:36:36.27
>>866
そりゃあ、binutils のディレクトリで make してるわけじゃないし。

ただソースにリンク張って、gcc のトップディレクトリで make && make install しただけ。
不味いの?
868デフォルトの名無しさん:2011/05/22(日) 19:43:55.17
すまん。
×gcc のトップディレクトリで
×gcc のトップディレクトリを別のディレクトリで configure して

あとビルドの残骸で残ってた ld-new と、インストールされた ld のハッシュ値は同じだった。
869デフォルトの名無しさん:2011/05/22(日) 19:44:14.00
binutilsとgccを一緒にビルドするとかやったことない、自分は
binutilsとgccを別々にビルドして
--prefixを合わせて
make install
を個別にやれば、はまらないような?
870デフォルトの名無しさん:2011/05/22(日) 19:46:07.24
そりゃそうよ。
bootstrapの時に新しい奴を確実に使うためのファイル名。
bootstrap終わったら消される。

>>867
指示通りに出来てなかったんだろうね。
871デフォルトの名無しさん:2011/05/22(日) 20:19:46.19
別々にするのが無難かなあ。やっぱり。

特に問題なく動いてるし、もういじるの面倒だ。
次のリリースが出たら、今度は別々にビルドしてみるよ。
872デフォルトの名無しさん:2011/05/22(日) 20:25:43.21
むしろ一緒にビルドする人初めて見たレベル
873デフォルトの名無しさん:2011/05/22(日) 20:27:40.40
それ、書きたかった
874デフォルトの名無しさん:2011/05/22(日) 20:40:28.23
binutilsのバージョン上げる必要ないでしょ?
875デフォルトの名無しさん:2011/05/22(日) 20:47:05.32
まあ実際にバグかもしれないな
んなけったいな入れ方しつつ、LTO使う人がいないせいで表面化しなかっただけかもしれない
876デフォルトの名無しさん:2011/05/22(日) 20:57:37.12
>>874
c++0x の name mangling を解読できる c++filt が欲しかったんだよ。
後はおまけ。

で、name mangling なんてコンパイラ固有なんだから
c++filt が gcc と関係ない binutils に入ってて大丈夫なのか?と想像をしていたら、
>>865 に「一緒にビルドできるよ」と書いてあった。

だからその通りやったわけよ。
877デフォルトの名無しさん:2011/06/17(金) 21:06:25.37
キーボードの矢印キーが押されたかどうかを判定する関数はありますでしょうか?
linuxで、c言語です
878デフォルトの名無しさん:2011/06/17(金) 21:08:18.71
GUI or CUI?
879デフォルトの名無しさん:2011/06/17(金) 21:11:38.87
>>878CUIです
880デフォルトの名無しさん:2011/06/17(金) 21:14:09.73
stdinのバッファリング切って、読んだキャラクター列が↓かどうか調べる。
ちなみに↑↓→←と押した。

$ hexdump -C
^[[A^[[B^[[C^[[D
00000000 1b 5b 41 1b 5b 42 1b 5b 43 1b 5b 44 0a |.[A.[B.[C.[D.|
0000000d
881デフォルトの名無しさん:2011/06/17(金) 21:18:19.28
ncurses使うんじゃないの?
882デフォルトの名無しさん:2011/06/18(土) 10:20:34.68
ncursesを作る話だな
883デフォルトの名無しさん:2011/06/21(火) 18:27:16.11
gcc4.6.1RCリリース
順調にいけば来週早々にも正式版がでる予定
884デフォルトの名無しさん:2011/06/28(火) 02:23:00.99
GCC 4.6.1
885デフォルトの名無しさん:2011/06/29(水) 01:49:38.82
システムに入ってるgccが古すぎるがアップデートしてもらえないので、
自分で--prefixを指定してコンパイルし、ホーム以下に gcc を入れました。
それでコンパイルは出来たのですが、実行時に共有ライブラリがうまくリンクされません。
LD_LIBRARY_PATHを設定するラッパーを用意する以外で良い方法はありませんか?

root権限なしで出来る方法でお願いします。
あと -static はスレッド(ちなみにLinux)まわりが不整合になるので不可です。
886デフォルトの名無しさん:2011/06/29(水) 01:57:29.44
ライブラリの置き場所はホームに固定でいいってこと?
それならリンカに-Lオプションでいいんじゃない?
887デフォルトの名無しさん:2011/06/29(水) 02:04:50.94
symlink?
888885:2011/06/29(水) 07:54:30.81
一晩寝てからドキュメントをあさり
リンク時に LD_RUN_PATH を設定するか -Wl,-rpath=/hoge を指定することで
バイナリのDT_RUNPATHタグに記録され実行時に利用される、
というので、とりあえず共有ライブラリがリンクされるようになりました。
この方法であってるでしょうか?

>>886
Linuxではリンカの-Lオプションはバイナリに渡されないようです。
でもドキュメント探すときのヒントになりました。
ありがとうございます。
889デフォルトの名無しさん:2011/06/29(水) 23:16:44.64
template<int> struct Example;
template<> struct Example<2>
{
template<class> static void StaticMethod(int) { }
};
template<> struct Example<3>
{
template<int> void Method(int)
{
Extern<2>::StaticMethod<int>(10);
}
};

 どのバージョンか解からんが、去年ぐらいのバージョンで
こんな感じのコードをコンパイルしようとしたら、StaticMethod<int>が
比較演算子とシンボルに分解されてコンパイルエラーになってた。
 いつ頃のバージョンで治ったのか知ってる人いる?
890天使 ◆uL5esZLBSE :2011/07/04(月) 16:08:18.09
2011年になっても未だにJAVA使い続けてる奴ってさ
仕事で仕方なくならわかるけど

家でもJAVAやってるなら本当にバカだよね。哀れ


お前たちは本当にゴミだな
891デフォルトの名無しさん:2011/07/04(月) 19:30:58.06
>>885 あと -static はスレッド(ちなみにLinux)まわりが不整合になるので不可です。

それってどんな現象がおきるのですか?
892デフォルトの名無しさん:2011/07/08(金) 01:29:58.77
gdb を使って任意の行にブレイクポイント設定しつつ
プロンプト表示させずに
即プログラムをデバッグ実行させるにはどうしたらいいでしょうか

イメージとしては、GUIのデバッガと同じようなことがしたいのですが
(ブレイク後値参照とかいった複雑?なことはしません)
893デフォルトの名無しさん:2011/07/08(金) 01:35:51.49
GUIのデバッガ使えよ。
http://www.gnu.org/software/gdb/links/
> Sites and links related to GDB
> Graphical Interfaces and Integrated Development Environments using GDB
> (略)
894デフォルトの名無しさん:2011/07/08(金) 01:41:59.37
そうではなくて、
ちょっとした便利ツールを作りたいのです
895デフォルトの名無しさん:2011/07/08(金) 01:47:17.54
>>892
できるのか知らんけど、パイプからコマンド流し込めないの?
896デフォルトの名無しさん:2011/07/08(金) 02:10:56.45
>>894
じゃあこっち。
http://www.kegel.com/linux/gdbserver.html

Lispを理解できるなら、シンプルにgdb.elでもいいかも。
897デフォルトの名無しさん:2011/07/08(金) 02:30:30.75
ソケットかlispですか
lisp love な教授がいたけど、
まったく共感出来なかったですね…

gdb server で進めていこうと思います
ありがとうございました
898デフォルトの名無しさん:2011/07/08(金) 11:02:55.49
lispはコードを参考にすればいいだけ。
ちょっと読めば、すぐにpty使ってるのが分る。
899デフォルトの名無しさん:2011/07/27(水) 23:59:31.72
gcc 4.6 の、intel CPU への最適化って、どのくらいパフォーマンス上がりました?
900デフォルトの名無しさん:2011/07/28(木) 05:10:41.24
いつと比べてだよ
試せよ
ダダなんだから
901デフォルトの名無しさん:2011/07/29(金) 07:53:41.70
>>900
誰か試してる奴が居たら、聞きたいじゃん。
うちではあまり効果無かった…。
902デフォルトの名無しさん:2011/07/29(金) 11:32:27.52
-Ofastとかしたの?
LTOも試してみた?
関数に最適化を助けるattribute付けてみた?
903デフォルトの名無しさん:2011/07/29(金) 19:00:59.52
-march=nativeでおk
904デフォルトの名無しさん:2011/07/30(土) 08:18:10.59
>>902
-Ofast -march=native でやってみたけど、gcc 4.4 の吐くバイナリと速度は変わらなかったわ。
ソフトウエアに激しく依存するだろうから参考にもならないだろうけど、
ちょっと他の人の感想が聞きたかったんだよ。ごめんな。
905デフォルトの名無しさん:2011/07/30(土) 23:51:06.32
COMのIDispatchを書くのがめんどくさいんで、タイプライブラリから生成したいんだけど、
そもそもGCCでタイプライブラリをどうやったら作れるのか解からん。
IDLに相当するようなもんってツールチェインにあるの?
906デフォルトの名無しさん:2011/08/17(水) 20:56:26.54
米Intel、並列プログラミングのためのC/C++言語拡張「Cilk Plus」をオープンソース化。GCCへの実装も開始
http://sourceforge.jp/magazine/11/08/17/0515246
907デフォルトの名無しさん:2011/08/21(日) 09:15:02.14
どうせ並列CPU持ってないと意味無いんだろ。
908デフォルトの名無しさん:2011/08/21(日) 10:21:17.18
gcc 4.6で、4.5まで作られてた例外テーブルの (関数名).eh ってラベルが作られなくなったせいか、
Macでのldの-dead_stripで.eh_frameセクションごと丸ごとstripされてしまって例外が受け取れなくなってないか?
ELFターゲットの--gc-sectionsのほうは大丈夫だった。

俺まだLeopardなんで買い換えろボケって話かもしれないんで、誰かLionで試してはくれまいか。
909デフォルトの名無しさん:2011/08/21(日) 18:23:07.38
--strip-debug?
910デフォルトの名無しさん:2011/08/21(日) 18:45:23.03
いやいや-dead_stripは-dead_strip。使われてないシンボルを削除するもので
動作自体はGNU ldの--gc-sectionsそのもの。
Appleのldだとオプションが違うのよ。
911デフォルトの名無しさん:2011/08/21(日) 18:49:07.63
ldでstripしたことないな
stripはstripでやってみたら
912デフォルトの名無しさん:2011/08/21(日) 18:57:41.89
だからstripじゃ無いんだよ。--gc-sectionsなんだよ。
効果は、どこからも参照されてないシンボルを「コードごと」実行ファイルから取り除くもので
stripにはこんな機能ないよ。Windows系のリンカで言うところのスマートリンクだよ。
913デフォルトの名無しさん:2011/08/22(月) 07:08:44.47
914デフォルトの名無しさん:2011/08/22(月) 19:33:55.81
ですです。
最初フロントエンドの問題かもと思ったけど、4.6.x全部でフロントエンド問わず発生するんで
gcc全般について話せるところのほうがいいだろうと。とくれば英語苦手なんでこっちに来た。

Simonさんに試してもらった範囲ではLionでは起きないってことで
今はldのバージョンとの組み合わせ問題かなあ?と思ってるところ。

条件がはっきりしたらgccのbugzillaに投げるから、誰か協力してくれない?
915デフォルトの名無しさん:2011/08/22(月) 21:30:52.40
gnatかいな?
916デフォルトの名無しさん:2011/08/22(月) 21:40:28.53
だからフロントエンド問わないって
C言語の-fexceptionsモードでも再現するよ
917デフォルトの名無しさん:2011/08/22(月) 22:25:31.82
確認方法はこんな感じでいいですか? https://gist.github.com/1162352
一応ldに-dead_stripを渡してみたけど、間違ってたらゴメン。
ちゃんとした確認用ソースコードとコマンドラインがわかれば改めて試します。
918デフォルトの名無しさん:2011/08/22(月) 22:35:38.49
あー、動いてますね……。
確認方法はそれでいいです。

やっぱ単にいつまでもLeopardにしがみついてないで買い換えろボケって話か……orz
919デフォルトの名無しさん:2011/08/22(月) 22:50:10.17
一応Leopardのldの何がまずいかを詳しく書いておくと、__eh_frameって例外情報のセクションが
「-dead_strip」使用、かつ「(関数名).ehってラベルを持っていないとき」限定で、リンクされない(実行ファイルから除かれてしまう)
gcc 4.5までは (関数名).eh ってラベルが生成されてたんだけど、4.6から生成されなくなった。

セクションの有無はsize -mか、GNU binutilsを入れているならobjdumpで確認可能、参考まで。

バグレポートするかどうか悩む……。
あとsage忘れに気付いたごめんなさい。
920デフォルトの名無しさん:2011/08/23(火) 00:01:53.37
>>919
Appleのldはソースが公開されているので、ひとまずそれを手元の環境でコンパイルして試すというのはどうでしょう?
ttp://www.opensource.apple.com/source/ld64/ld64-123.2.1/
ChangeLogを読むと修正内容に-dead_stripやdead strippedなどと書かれてますね(内容は確認してないです)。
921デフォルトの名無しさん:2011/08/23(火) 13:35:05.36
objdumpは標準入力からデータを受けとるようなことは出来ますか?
見た感じファイルから読み込まなければならないような作りに見えますが
922デフォルトの名無しさん:2011/08/23(火) 18:38:29.49
cat a.out |objdump -d
これで普通に出たけど
923デフォルトの名無しさん:2011/08/23(火) 18:51:34.83
それ,objdumpがobjfileを指定されていないときにデフォルトでa.outを読むから
924デフォルトの名無しさん:2011/08/23(火) 19:16:46.30
本当だ
ソース見る限り方法はなさそう

if (optind == argc)
display_file ("a.out", target);
else
for (; optind < argc;)
display_file (argv[optind++], target);
925デフォルトの名無しさん:2011/08/23(火) 19:31:03.05
windowsじゃバイナリが読めないからじゃね
926デフォルトの名無しさん:2011/08/23(火) 20:15:33.95
/dev/stdin指定しときゃよくね?
927デフォルトの名無しさん:2011/08/23(火) 20:54:54.54
objdump -d /dev/stdin < foo
言われてみると確かにそうだが
よく気づいたな
928デフォルトの名無しさん:2011/08/23(火) 21:43:56.60
objdump -d /dev/stdin <a.out だと動いたけど
cat a.out | objdump -d /dev/stdin だとだめだ
929デフォルトの名無しさん:2011/08/23(火) 21:50:55.06
どうしてもパイプ使いたくて特定のシェル(例:bash)なら↓でどうだろうか?
objdump -d <(cat a.out)
930デフォルトの名無しさん:2011/08/24(水) 06:21:55.36
>>920
ありがとう、でも/usr/include/mach-o以下が足りてなくてビルドできない……。
OSのバージョンが違うんだからそうかもしれないけど。

わかったのは、snow leopard以降libunwindというのを使うようになっていること。
恐らく例外情報をもっとうまく扱えるようになって、ldはラベルを頼りにしなくて良くなった。
で、ここからは想像だけど、きっとldがラベルを必要としない→じゃあgccもラベル吐かなくていいんじゃね?って流れがあった。
Leopardは切り捨てられたんだ……orz
931デフォルトの名無しさん:2011/08/24(水) 11:38:12.44
>>930
余計なお世話かもしれませんが、Snow Leopard以降のOSを使った方が色々と楽だと思いますよ。
PPCなMacをお使いならIntel Mac(Core 2 Duo以降)への移行もしたいところ(Lionへの移行も睨んで)。
932デフォルトの名無しさん:2011/08/24(水) 13:52:15.01
>>928
objdumpはファイル記述子0(stdin)を
そのまま使うということが出来ない実行ファイル。

常にパスをopen(2)しないといけない。
/dev/stdinはopend(2)でファイル記述子0を扱うための仕掛け。

|を使うとopen(2)でなく、shellがpipe(2)でパイプを作成し、
右辺コマンドのファイル記述子0としてから、objdumpを起動する。
しかし、objdumpはファイル記述子0を扱えない。

933デフォルトの名無しさん:2011/08/24(水) 13:53:20.48
>>929
結局はパイプなので駄目。単なる構文糖衣。
ちなみに最初期のシェルはそういう文法(ただし括弧なし)だった。
934デフォルトの名無しさん:2011/08/24(水) 13:54:29.57
>>930
その辺がOS独自拡張の怖いところだよね。
935デフォルトの名無しさん:2011/08/24(水) 15:06:13.38
>>933
このbashの拡張は名前付きパイプを作るもので、/dev/stdinとは別物になるはずだから、それでもできないの?
936デフォルトの名無しさん:2011/08/24(水) 15:26:36.04
>>935
named pipeになるかどうかは
bashをmakeする時のconfigによる。
必ずnamed pipeになるわけじゃない。

その上、objdumpがregular fileかどうか調べてる。
$ objdump -d <(cat /bin/ls)
objdump: Warning: '/dev/fd/63' is not an ordinary file
937デフォルトの名無しさん:2011/08/24(水) 16:52:11.68
>>936
あらら、ご丁寧にそんなチェックが入るのか、残念。
938デフォルトの名無しさん:2011/08/26(金) 12:57:43.92
復帰
939デフォルトの名無しさん:2011/08/27(土) 05:23:21.81
SSEでベクトル化しやすいような、配列の合計を求めるコードを教えてください。
940デフォルトの名無しさん:2011/08/27(土) 05:30:08.71
その質問しかたで答えられる人がいると思うの?
941デフォルトの名無しさん:2011/08/27(土) 09:37:40.02
本人なら答えられるはず
942デフォルトの名無しさん:2011/08/27(土) 19:26:19.07
自分で質問して自分で答えると。
943デフォルトの名無しさん:2011/08/27(土) 20:52:09.65
2ch では良くあること
おまいらも見に覚えがあるだろ
944デフォルトの名無しさん:2011/08/28(日) 15:15:34.25
× 見に覚え(Google mozc)
○ 身に覚え(Anthy,Canna)
945デフォルトの名無しさん:2011/08/29(月) 11:14:01.91
>>939
float32 sum=0;
for(int i=0;i<N;i++) sum += array[i];
946デフォルトの名無しさん:2011/08/30(火) 18:29:50.24
gcc3 と gcc4 ってなにか変わったんですか?教えてください。

gcc 3.4.4で、以下のC++ソースがコンパイルできていました。
----- hello.cpp -----------------------
#include <iostream.h>
int main() {
  cout << "Hello, world" << endl;
  return 0;
}
----- hello.cpp -----------------------

setup.exe を見ていると、gcc4 があることに気づき、
gcc4 4.3.4 をインストールしたところ、下記のエラーでコンパイルできなくなりました。
$ g++ hello.cpp
hello.cpp:1:22: error: iostream.h: No such file or directory

Cygwin を全部削除して、gcc3 を入れずに gcc4、gcc4-core、gcc4-g++をインストールしても、同じでした。
gcc4 を使うにはなにか他に入れる必要があるのでしょうか?
947デフォルトの名無しさん:2011/08/30(火) 18:37:44.33
牧原あゆちゃんの画像もっとくれ
948デフォルトの名無しさん:2011/08/30(火) 18:49:50.34
エラーメッセージを読みなよ
 iostream.h: このようなファイル、またはディレクトリは見つかりません
#include <iostream>にしな
949デフォルトの名無しさん:2011/08/30(火) 19:30:48.46
$ g++ hello.cpp
hello.cpp: In function 'int main()':
hello.cpp:5: error: 'cout' was not declared in this scope
hello.cpp:5: error: 'endl' was not declared in this scope

<iostream> にしてもエラーがでます。???わかんない
950デフォルトの名無しさん:2011/08/30(火) 19:35:33.18
std::
951デフォルトの名無しさん:2011/08/30(火) 20:08:19.35
error: 'cout' was not declared in this scope
エラー:このスコープの中では 'cout' は宣言されていない

??
952デフォルトの名無しさん:2011/08/30(火) 20:11:35.27
うしんg なめさpせ std;
を入れるのだ
953デフォルトの名無しさん:2011/08/30(火) 20:17:27.39
C++勉強し直したら?
954デフォルトの名無しさん:2011/08/30(火) 20:17:36.10
using namesapse std;

??どこに入れるんですか?
955デフォルトの名無しさん:2011/08/30(火) 20:18:13.99
C++って、文法変わった?
956デフォルトの名無しさん:2011/08/30(火) 20:19:16.81
>>950
これだけで分かる人はそんな質問しないと思うwww
957デフォルトの名無しさん:2011/08/30(火) 20:21:04.90
>>946 のコードは『はじめてのC++』という本に載ってるんです。
958デフォルトの名無しさん:2011/08/30(火) 20:42:58.74
おまえにはgccはまだはやい
959デフォルトの名無しさん:2011/08/30(火) 20:44:17.24
>>957
その本を窓から投げ捨てるといいよ。
960デフォルトの名無しさん:2011/08/30(火) 20:46:12.99
たまには親切に

#include <iostream>
using namespace std;
int main(){
cout <<"やっほー"<<endl;
eturn 0;
}
961デフォルトの名無しさん:2011/08/30(火) 21:04:17.02
>>960
通りました。gcc3 でも、gcc4 でも。
gcc4 では文法が厳しくなった?のでしょうか・・・

>>959
そうですね、捨てます。
いいC++の本があったら教えてもらえませんか?
962SCHEME餃子 ◆8X2XSCHEME :2011/08/30(火) 21:17:04.68
>>961
マジレスすると >>946 は C++ のコードとして誤っていると言える。
なので gcc4 が厳しくなったと言うよりは、それより前が緩かった。
(gcc3 でもコンパイル時に -std=c++98 オプションを付けると >>946 はエラーになるんじゃないかな。 確認してないけど。)
963デフォルトの名無しさん:2011/08/30(火) 21:25:23.85
gcc3 -std=c++98 としても、>>946 のコードはワーニングはでますが、通りました。

wiki を見ると、C++はここ数年仕様に追加がされてるみたいですね。。。。
最新の本を探してみます。ありがとうございました。
964デフォルトの名無しさん:2011/08/30(火) 22:21:32.80
仕様追加とか関係なく、その本が仕様に準拠してないだけ。
965デフォルトの名無しさん:2011/08/30(火) 22:42:51.16
                _〈_( o_ノ☆'.....i ....ヽ.............\
        ィ-、    ぐ,n(_乂..!.::::::i:::|::::i:::|:::::::i:::ヽ:::ヽ
        / /  ィ-、尤o う::::;;|斗イ::ハ斗亠',斗ト、:i::::::}
       / / / /7(乂):::::| ,ィzz\   ,イ芯ヾレ!::::::!
      /  / /  / |:{ノ☆::::!{弋zリ     ¨´≠彡'リ
   _/⌒ヽノ   /  |::::::::::ハ::{  ≠     '       }  r‐、   ,‐、
  /ー、\| /ヘ  /   ∠::::::::::::トミゝ   {ニニニィ   ,!  | |  / /
  \ \八 〉'     彡ノリ      ∨    }  ,イ  | |  / /
         |       リ j/ー个:.、  ゙こ三/ /   | |__/ /-‐、
                 ィムムト、_. ヽ、こ,. イ)、    |  /〉〈ノハ
966デフォルトの名無しさん:2011/08/30(火) 23:26:47.82
発売日でみるにC++98制定前/制定後だがC++98完全準拠でないコンパイラも多々あった頃の状況にあわせた本なんじゃないか
規格解説書でなく実用入門書なら規格よりも当時主流のコンパイル実装に沿った内容の本もありえる(・・・)
967デフォルトの名無しさん:2011/08/30(火) 23:55:27.78
で、現在の規格に準拠した本ってどれなんですか?
968デフォルトの名無しさん:2011/08/31(水) 00:09:46.51
入門書に良書なし、金出すのはもったいない、webで済ませろ
969デフォルトの名無しさん:2011/08/31(水) 00:16:17.53
入門書でなくてもいいです。これは定番でしょ、みたいな本があれば教えてください。1万以上でも構いません。
970デフォルトの名無しさん:2011/08/31(水) 00:17:15.56
よっしゃ。

ストラウストラップのプログラミング入門
http://www.amazon.co.jp/dp/4798119598

C++の生みの親が初心者に語りかけるプログラミングの王道と手法!
¥ 8,190 国内配送料無料
971デフォルトの名無しさん:2011/08/31(水) 00:17:52.42
定石本ってのはないと思うよ
地道に積み上げるの吉かと
972デフォルトの名無しさん:2011/08/31(水) 00:18:02.60
C++Primer
973デフォルトの名無しさん:2011/08/31(水) 00:27:22.96
ume
974デフォルトの名無しさん:2011/08/31(水) 00:28:12.20
うめ
975デフォルトの名無しさん:2011/08/31(水) 00:32:07.02
もも
976デフォルトの名無しさん:2011/08/31(水) 00:35:21.42
>>970
出版も今年だし、著者のストラウストラップがISO C++標準化委員会のメンバーっていうのもいいですね。
1000頁を超えるとなると、少々ビビリますが、検討してみます。ありがとうございました。
977SCHEME餃子 ◆8X2XSCHEME :2011/08/31(水) 00:39:53.09
「学問に王道なし」と言う言葉もある。
押さえといた方がいい本というのはあるけど、それだけ読めば充分というような本は無いし、当人の資質によっても妥当な本は違う。
まぁ、 C++ は複雑すぎだよな。 俺としては C++03 で充分すぎると思う。
978デフォルトの名無しさん:2011/08/31(水) 00:52:38.39
>>969
規格書
C++ In Depthシリーズ
979デフォルトの名無しさん:2011/08/31(水) 02:39:04.33
最新ANSI C++オブジェクト指向プログラミング―エキスパートへの最短コース (Professional Programmers’ Books) (単行本)
Paul Anderson (著), その他
¥ 1,269 中古品
¥ 13,923 ほぼ新品
980デフォルトの名無しさん:2011/08/31(水) 02:58:39.11
最近のメジャーなC++コンパイラは1998年の規格にほぼ準拠している

C++
Wikipedia
981デフォルトの名無しさん:2011/08/31(水) 07:30:23.44
>>978 >>979
どちらも構文の説明にとどまらず、オブジェクトモデリングの話からクラス設計の指針にいたるまで、
網羅的に書かれているようですね。検討させて頂きます。ありがとうございました。
>>980
そのようですね。もうgcc3 は使われていないんですかね・・
982SCHEME餃子 ◆8X2XSCHEME :2011/08/31(水) 12:00:56.51
>>981
gcc3 が規格に準拠していないというわけでなく、独自の拡張として古い書き方を許容してるんだよ。
オプション指定で厳密に規格に従うモードにすることもできるよ。
983デフォルトの名無しさん:2011/08/31(水) 12:27:34.32
なめさpせ (またの名を namesapse) が流行らなくて残念だったなおい。
984デフォルトの名無しさん:2011/08/31(水) 14:32:36.61
>>983
受けると思ったんです。orz
985デフォルトの名無しさん:2011/08/31(水) 18:43:35.60
じえんおつ
986デフォルトの名無しさん:2011/08/31(水) 20:09:24.50
namespace なめsぱcえ だろ。
987SCHEME餃子 ◆8X2XSCHEME :2011/08/31(水) 22:44:46.31
SKK-IME だとローマ字として中途半端なのは変換されずに消えるから「なめぱえ」になった。
988デフォルトの名無しさん:2011/09/01(木) 20:40:44.47
>>952
うしんg なめsぱせ std;
じゃなく、
うしんg std::cout;
うしんg std::cin;
を使うようにしろよ。
989デフォルトの名無しさん:2011/09/02(金) 08:42:36.66
iostream.hは標準化前っすね
まあそういう時代もあった
990デフォルトの名無しさん:2011/09/02(金) 19:51:44.28
>>985
Gentoo
991デフォルトの名無しさん:2011/09/02(金) 20:55:23.52
>>988
すべったんでもうやんないです。
992デフォルトの名無しさん:2011/09/02(金) 22:20:20.29
ume?
993デフォルトの名無しさん:2011/09/02(金) 22:24:14.90
 
994デフォルトの名無しさん:2011/09/02(金) 22:25:05.14
うんこ
995デフォルトの名無しさん:2011/09/03(土) 14:00:10.85
          ,,,ムWwWwwWWww,,,,
         ミ川ミ川ミ三川ミミ川ミ三ミミ
       彡"彡三ミ彡彡彡ミミ川ミ彡川彡
        彡""`''~~~~"゛--、ミ三川三川彡
        y、      ノム 彡ミ川ミ三川ミミ
        / 〈   ノ'''''' ⌒  川ミ川ミリ三川ミ
       .l__   _     川彡ミ川リ彡川ミ
      rl||l| i__ril|||llli     川ミ川川リミ川ミ   
      ヽ_l_/ ヽ____ノ ̄ ̄ ̄川彡ミ ヽリ川川
       ((  __)、      川リ 6 ノノリ川川
        |/ ̄  ヽ     ノ川| 9 ´川川リ
        .|イミFゝ_,,    /  (((l   川リ川
        (~^~√`      川   (川リ
        .|  ̄        ::;;;   /~ヽ
        .ヽ|||ll___,,,,,ー""   /   人\
             `入      /       \
996デフォルトの名無しさん:2011/09/03(土) 14:13:14.78
997デフォルトの名無しさん:2011/09/03(土) 14:38:58.85
>>976
原著出たのはもう何年か前だぞ
998デフォルトの名無しさん:2011/09/03(土) 15:02:39.30
だから、日本のソフトウェア産業って、遅れてるんだな。
999デフォルトの名無しさん:2011/09/03(土) 15:13:02.51
>>997
でもいい本ですよ。
読本として上級者も読みましょう。
1000デフォルトの名無しさん:2011/09/03(土) 15:13:09.17
原因と結果が逆じゃね?
ソフトウェア産業全体が最先端を追い掛けないから、出版が遅れても許容されている。
最先端を追い掛けている極一部は原書を読むから、やはり出版の遅れは問題にならないし。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。