1 名前:login:Penguin [03/12/12 08:45 ID:tRHVcB2u] 組み込み系エンジニア(初級〜プロ級 どなたでも)集まれー。 組込Linuxのディストリビューション、カーネル、BSP、 ドライバ、ツール、クロス開発環境、他OSとの比較など、 Embeddedな題材についての紹介、評価、質問、風評、何でもござれ。 2〜9あたりで、関連スレ、ディストリ、参考文献を紹介。
666 名前:login:Penguin [2008/08/06(水) 10:52:09 ID:5rbVEHAI] .hはC言語のヘッダファイルで C++では.hをつけないんだけどね。
667 名前:login:Penguin mailto:sage [2008/08/06(水) 11:20:35 ID:AkO0dpZk] >>666 ここでは、そんなC++の一般知識を確かめているわけではないのだが...
668 名前:login:Penguin mailto:sage [2008/08/06(水) 11:32:51 ID:DuvSdRRq] >>662-663 の受け答えを見るか切りではそんな一般知識も不足してそうだけどな。
669 名前:login:Penguin mailto:sage [2008/08/06(水) 11:39:45 ID:AkO0dpZk] >>688 では>>662 はどのようにすればいいの?
670 名前:login:Penguin mailto:sage [2008/08/06(水) 11:55:13 ID:DuvSdRRq] >>669 math.hの関数はnamespaceを使ってない。 cmath使うなら::pow()になる。 末尾のlとかはつかん。
671 名前:login:Penguin mailto:sage [2008/08/06(水) 12:01:41 ID:AkO0dpZk] >>670 いや、だからC++でpowlを使いたいんだけど、libstdc++には定義があるようだし どうすればいいのという話です。 libstdc++にあるのは偽者?
672 名前:login:Penguin mailto:sage [2008/08/06(水) 12:38:29 ID:MrWK8qGv] gcc の -m* オプションじゃまいか? -mlとか、SH4なら -m4とか。よくシランが。
673 名前:f27e582e9c462b mailto:小雪さんを放せ! [2008/08/06(水) 13:05:51 ID:8eTBydbW] >>1 >>>2 ch:net>>>2 ch.net>>>ip.tosp.co.jp/i.asp?I=f27e582e9c462b >
674 名前:f27e582e9c462b mailto:小雪さんを放せ! [2008/08/06(水) 13:06:58 ID:8eTBydbW] >>1 >>>2 ch:net>>>2 ch.net>>>ip.tosp.co.jp/i.asp?I=f27e582e9c462b >
675 名前:login:Penguin mailto:sage [2008/08/06(水) 14:03:51 ID:mCPIcfm+] >>671 なんで long double が必要なの? そっちの理由が知りたい
676 名前:login:Penguin mailto:sage [2008/08/06(水) 14:41:13 ID:AkO0dpZk] >>675 そこにソースがあってコンパイルしたいから、ではダメですかね。例えば ttp://www.debian.org/ports/ これらの取り組みを否定するものではないでしょ?
677 名前:login:Penguin mailto:sage [2008/08/06(水) 14:44:45 ID:AkO0dpZk] あとは、すでに回避方法は >>658 で挙げてあるけど、 なぜ CとC++でコンパイルできたり出来なかったりする のかという疑問に答えを出したい。
678 名前:login:Penguin mailto:sage [2008/08/07(木) 00:23:53 ID:YsvtngAO] >>677 多分前提が違う。 最初思い込みで既存の動いていたコードの話なのかと思ったけど、 >>656 は一度でもg++で通ったと言ってるわけではない。 members.aon.at/hstraub/linux/newscache/porting-howto.html 4.4.1. New headers replacing C-headers www.linuxforums.org/forum/linux-programming-scripting/125526-c-gcc-math-h-lm.html
679 名前:login:Penguin mailto:sage [2008/08/07(木) 01:06:49 ID:XTerfC5k] gcc-3.4で arch/sh/kernel/entry.Sをビルドすると asm違うぞボケと怒られる /* * NOTE!! This doesn't have to be exact - we just have * to make sure we have _enough_ of the "sys_ni_syscall" * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */ .rept NR_syscalls-(.-sys_call_table)/4 .long SYMBOL_NAME(sys_ni_syscall) ここが違うって怒られるってことは、NR_syscallsが無いと思うけど これってどうすればいいのですかね
680 名前:login:Penguin mailto:sage [2008/08/07(木) 02:12:27 ID:AwAlKngr] >>671 テンプレート
681 名前:login:Penguin mailto:sage [2008/08/07(木) 13:57:02 ID:g6GIIrvN] >>678 貼られたリンクが何を言いたいのか分からない。 g++でコンパイルすると-lmが自動的につくと言いたい? >>680 libstdc++内のがテンプレートだとしても、g++でコンパイルすれば 自動的に-lmが付加されて、libm内のpowlが参照されると思うから コンパイルできるはずなんですが、何か違いますか。 再度書きますが、sh4で long doubleの数学関数を含むソースが gccでコンパイルできてg++でコンパイルできない。 i386ではgcc,g++どちらもコンパイルできる。 sh4でlong double系の数学関数が未実装だというのなら、 なぜgccだけコンパイルできるのか。
682 名前:login:Penguin mailto:sage [2008/08/07(木) 14:24:49 ID:jPayqA+W] >>681 SH3のgccが手近にあったんで>>656 をコピペでビルドしてみた。 拡張子.cpp : g++でもgccでもダメ 拡張子.c : g++はダメだがgccなら通った gcc バージョン 3.2.1。 ダメの内容は、 test.cpp: function 内の `int main()': test.cpp:5: `fabsl' undeclared (first use this function) test.cpp:5: (未宣言変数については、それが関数内で最初に現われた時だけ報告されます。) 関係ないと思うけど、ビッグエンディアン。 で、やはりi386では全部通るね。gcc version 2.96。
683 名前:login:Penguin mailto:sage [2008/08/07(木) 14:26:39 ID:g6GIIrvN] >>拡張子.cpp : g++でもgccでもダメ gccはフロントエンドだから拡張子をみるんでしょ。 cppだからg++を読んでる。
684 名前:login:Penguin mailto:sage [2008/08/07(木) 14:32:26 ID:jPayqA+W] 要するにCじゃなきゃ通んないってことね?SHではなぜか。
685 名前:login:Penguin mailto:sage [2008/08/07(木) 16:19:08 ID:AwAlKngr] なんだ、よく読んだら人の話を聞かない頭でっかちさんかw >>668 , 670 を心して読め。 >>664 はコンパイル通ってるのか? ひょっとして、同じソースコードが CとC++のコンパイラで コンパイル出来る事を期待しているのか? 会社のプロジェクトだったら悲惨だな。 まぁ、人並みにがんがれ。w
686 名前:login:Penguin mailto:sage [2008/08/07(木) 16:24:20 ID:AwAlKngr] でも >>667 を見ると基礎はありそうな事を書いてはいるね。 こんなのが上司だったら即転職だなw
687 名前:login:Penguin mailto:sage [2008/08/07(木) 16:24:52 ID:g6GIIrvN] >>685 >ひょっとして、同じソースコードが CとC++のコンパイラで >コンパイル出来る事を期待しているのか? そうだよ。示したテストケースは簡略化したものだけど、 実際にはc++で書かれ<math.h>をincludeしてlong doubleの数学関数 を呼び出しているソースをコンパイルしたいのであって、 cmathを使え、long double は使うなというのはここで問題に している話題ではない。
688 名前:login:Penguin mailto:sage [2008/08/07(木) 16:41:58 ID:g6GIIrvN] ちなみに #include <cmath> にしても i386 は powlとかの long double数学関数を呼べるし、 sh4ではコンパイルエラーになる。 なぜか?
689 名前:login:Penguin mailto:sage [2008/08/07(木) 16:49:25 ID:jPayqA+W] >>688 cmathの中で結局math.h読んでるからじゃない?
690 名前:login:Penguin mailto:sage [2008/08/07(木) 16:50:35 ID:jPayqA+W] あ、いや、忘れてくれ。
691 名前:login:Penguin mailto:sage [2008/08/07(木) 16:52:28 ID:KvEAlGj2] そもそも-mは何を指定してるんだ?
692 名前:login:Penguin mailto:sage [2008/08/07(木) 16:53:40 ID:g6GIIrvN] >long double は使うなというのはここで問題に すみません。ここは取り消します。理解できました。
693 名前:login:Penguin mailto:sage [2008/08/07(木) 16:54:14 ID:g6GIIrvN] >>691 なにも。 何を指定すれば良いの?
694 名前:login:Penguin mailto:sage [2008/08/07(木) 16:56:24 ID:KvEAlGj2] >>693 何もってgccのビルド時に指定してないのか? コンパイルオプション見ろよ。
695 名前:login:Penguin mailto:sage [2008/08/07(木) 16:58:14 ID:WjgH/Ftv] >>693 つ ヒント:32と64 manくらい見てから人に聞こうな
696 名前:login:Penguin mailto:sage [2008/08/07(木) 17:03:48 ID:g6GIIrvN] >>695 全然わかりません。SH特有のオプションに-m32とか-m64とかないですが。 >>694 sh4ネイティブ環境でコンパイルしたので、sh4ネイティブ用の デフォルト値です。
697 名前:login:Penguin mailto:sage [2008/08/07(木) 17:06:11 ID:jPayqA+W] SH の-mに-mb -ml -m2,3とか以外の指定ってあったっけ?
698 名前:login:Penguin mailto:sage [2008/08/07(木) 17:08:16 ID:3ZyKP7zl] >>697 無いと思う きっと>>695 は勘違いしてるはず
699 名前:login:Penguin mailto:sage [2008/08/07(木) 17:10:07 ID:3ZyKP7zl] >>696 オプションはデフォルトではなく、環境にあわせて指定した方が良いですよ
700 名前:login:Penguin mailto:sage [2008/08/07(木) 17:11:36 ID:g6GIIrvN] 私の無知もあったので問題を再整理します。 C++で<math.h>をincludeしてlong double系の数学関数(たとえばpowl)を 呼び出しているソースがあります。これをi386でコンパイルすると コンパイルできるのですが、sh4でコンパイルするとコンパイルできません。 回避方法として、powlをdoubleのpowで#defineする方法があります。 解決方法として、<cmath>にしてpowのテンプレートを使う方法があります。 疑問点として、なぜsh4でpowlがc++から呼び出せないのでしょうか。 です。
701 名前:login:Penguin mailto:sage [2008/08/07(木) 17:19:20 ID:g6GIIrvN] >>699 例えば ttp://sh-linux.org/ ここのパッケージはspecファイルに何も書いていないので、 デフォルト値が採用されているのですが何かまずいですか? 私の場合トイ用途なので、特定のCPUに追い込んだ設定は必要無いのです。
702 名前:login:Penguin mailto:sage [2008/08/07(木) 17:50:49 ID:EN5PuvqY] gnu系の知識はないが、 SH4って安物以外はFPU内蔵で、FPU命令かソフトで実現か選ぶ必要があるとか?
703 名前:login:Penguin mailto:sage [2008/08/07(木) 19:22:03 ID:AwAlKngr] math関数は target依存じゃなかったかな?(多分...) この場合(テンプレート未使用時)、C++ から C関数を使う事になるのか? とすると extern "C" か...
704 名前:login:Penguin mailto:sage [2008/08/07(木) 19:28:55 ID:g6GIIrvN] >>703 後出しと言われるかもしれませんが、extern "C" {} で囲むのは 最初にやってだめでした。
705 名前:login:Penguin mailto:sage [2008/08/07(木) 20:02:21 ID:g6GIIrvN] 一方sh4のCからのpowlの呼び出しの方も、 warning: incompatible implicit declaration of built-in function ‘powl’ と警告がでます。でもlibmにはpowlの定義があるのでリンクできてしまいます。 確かに、math.h(から読み込まれるbits/mathcalls.h)にはpowlの 定義はありません。 もしかして意図していない関数をリンクしているという事なのでしょうか。
706 名前:login:Penguin mailto:sage [2008/08/07(木) 20:12:32 ID:g6GIIrvN] >>705 i386も同様にpowlは見つかりませんね。 build-inといってるからgccの中なのかな。 ./gcc/builtins.def これか。でもtarget依存のようには見えないけど。
707 名前:login:Penguin mailto:sage [2008/08/07(木) 22:04:56 ID:AwAlKngr] 環境が違うみたいだから、さいなら... うちは gcc-3.4.5 の x86_64-pc-linux-gnu クロス環境。 glibc-2.3.5。 >>703 でコンパイル & リンク確認。
708 名前:login:Penguin mailto:sage [2008/08/07(木) 22:14:35 ID:KvEAlGj2] >>698 >>702 も言ってるがm4とm4-nofpuの指定があるとおもったけど、なくなったの?
709 名前:login:Penguin mailto:sage [2008/08/07(木) 22:34:16 ID:AwAlKngr] >>708 あるよ。 ほかにも色々。
710 名前:login:Penguin mailto:sage [2008/08/07(木) 22:45:20 ID:g6GIIrvN] >>708 あるけど、-m4でしかコンパイルしていない。 cc1plus: error: command line option ‘-m4-nofpu’ is not supported by this configuration こうなる。
711 名前:login:Penguin mailto:sage [2008/08/07(木) 23:37:33 ID:XTerfC5k] --target-help見てないなら無い それだけだあるのにビルドできんのは 何か不足してるんでしょ
712 名前:login:Penguin mailto:sage [2008/08/08(金) 00:57:27 ID:MljPKlSM] RTL8139DってWAL 対応してないですよね?
713 名前:login:Penguin mailto:sage [2008/08/08(金) 05:47:12 ID:GQVMFxS/] >>705 その警告が出るということは、見に行くヘッダが間違ってないか? ホスト環境の方見てるとか。
714 名前:login:Penguin mailto:sage [2008/08/08(金) 22:43:11 ID:o2c8kFjg] >>705 その警告の通り、ヘッダには定義がないが、ライブラリ自体には実装しているということです。 C++でもプロトタイプ宣言をすればちゃんとコンパイルが通ります。 i386で正常にコンパイルが通るのは、ちゃんとヘッダ(mathinline.h)に定義があるからです。 このファイルは機種依存のファイルで、glibcのソースでは、sysdeps/(アーキテクチャ)/fpu/bits/以下にあります。 おそらく、このファイルがないアーキテクチャではSHのような症状になるのではないでしょうか。
715 名前:login:Penguin mailto:sage [2008/08/09(土) 00:04:29 ID:tDLp/wdz] これって意味ある? 納品物のソースの差分取るとこんなの 満載で250万請求されたw #ifdef CONFIG_SH_STANDARD_BIOS -static int strlen(const char *s) +//static int strlen(const char *s) +static int tmp_strlen(const char *s) { int i = 0; @@ -145,7 +147,9 @@ void puts(const char *s) { - sh_bios_console_write(s, strlen(s)); +// sh_bios_console_write(s, strlen(s)); + sh_bios_console_write(s, tmp_strlen(s)); } #else void puts(const char *s)
716 名前:login:Penguin mailto:sage [2008/08/09(土) 00:26:09 ID:IYvljXAp] >>215 作業量で値段はかるのイクナイ!(><) 250万以上の利益を得られる見込みで委託してたのなら、動いた以上は 四の五言わず払ってやれ。もしヘボ作業だとしても、そんなのしか 見つけられない自分を反省して、次からはそこは声かけないようにすればおけ。 それはともかく、そのコードの妥当性は開発規模次第。 かなり大きな開発でなら、試行錯誤する準備の過程で手を付けてはみたが %
717 名前:login:Penguin mailto:sage [2008/08/09(土) 00:27:05 ID:IYvljXAp] 最近2ちゃんは記事切れまくるな。 (続き) それはともかく、そのコードの妥当性は開発規模次第。 かなり大きな開発でなら、試行錯誤する準備の過程で手を付けてはみたが 結局関数名を変えて場所を作っただけに終わったとかよくあること。 自社製品とか、自分が永続的に関わる製品なら隅々まできれいにするけど、 一回きりの外注委託でそこまで気合の入った整理整頓なんか誰もしないよ。
718 名前:login:Penguin mailto:sage [2008/08/09(土) 00:34:42 ID:tDLp/wdz] >>716 Bランク75.4万/1人月でこのコードレベルですよ それになんだか意味のないコード大量につまってるし 金額とこの質だとかなりむかつきませんか?
719 名前:login:Penguin mailto:sage [2008/08/09(土) 00:38:10 ID:644OQC1c] やくざな世界だ
720 名前:login:Penguin mailto:sage [2008/08/09(土) 01:09:14 ID:q9GjTE39] >>718 問い詰めりゃいいじゃん。 つーか納品時にレビューぐらい普通やらないか?
721 名前:login:Penguin mailto:sage [2008/08/09(土) 01:10:49 ID:IYvljXAp] 月75万なんて底辺だろ。 中国・インドのクラスに近い。あっちはIT系仕事だと30万とかもあるが、 組み込みでその値段はちょっといかがなものかと。組み込みスレだから ITじゃなくて組み込み系の仕事だという前提でだけど。 つか、発注内容はなんだったの?
722 名前:login:Penguin mailto:sage [2008/08/09(土) 01:15:56 ID:IYvljXAp] >>720 底辺をなめるなっ・・・! 奴らは変数にj1,jj1,jj2,jj3,jj4tmpとか平気で書くんだぞ。 何千行ある関数だってものともしない。計算法違いの指摘で 「例えば4の時は13になる」というとif(n==4)return 13;と 冒頭に書いてOKにする。 更に最悪なのは、指摘しても「?」という顔で全然判ってないこと。 こっちがストレスで先に死ぬわ。
723 名前:login:Penguin mailto:sage [2008/08/09(土) 01:50:03 ID:oDTW9Xf8] >>722 割り算やって商と譲与を求める場合は、p, q で無問題 時間に関する変数は t? で ok 任意の個数を表す場合は n? で全然 ok ループ変数は i? でかまわない 長さを表す場合は l?, s? でいいし 固有の係数を表す場合は k? でok 何か問題があるのか?
724 名前:login:Penguin mailto:sage [2008/08/09(土) 02:06:14 ID:7rWDtXOs] fortranかよw
725 名前:login:Penguin mailto:sage [2008/08/09(土) 02:10:18 ID:T3JR40W3] >>723 すごいね。 一緒に仕事したくないタイプだなw 絶対に...死んでも...w
726 名前:login:Penguin mailto:sage [2008/08/09(土) 08:40:47 ID:e8hz21eJ] スコープによるだろ
727 名前:login:Penguin mailto:sage [2008/08/09(土) 09:07:37 ID:oDTW9Xf8] >>725 数値演算やってる関数で長い変数名つけてるの見るとムカつく 長い名前つけるくらいだったらコメントに解いてる数式書いておけ
728 名前:login:Penguin mailto:sage [2008/08/09(土) 09:30:10 ID:CoNuCxIk] 確かに一緒に仕事したくないってことで
729 名前:login:Penguin mailto:sage [2008/08/09(土) 10:23:55 ID:7rWDtXOs] >>727 iCounter++ とかw、あるある。なんで素直に i++と書けんのかと。
730 名前:login:Penguin [2008/08/09(土) 10:53:04 ID:/CZ0V8cN] 組み込み系のアウトソーシングスレになってきたな。 受け入れ側チームで評価、テストを厳密にしないと カネだけ取られちゃうだろうね。
731 名前:login:Penguin mailto:sage [2008/08/09(土) 11:26:54 ID:IYvljXAp] >>723 書き方が悪かった、すまん。 計算法、といってもそういう数値計算なら俺もそういう数学的記法にするが、 普通のアプリ的な処理方法でそういう記法をしてくるってこと。正直市ねって感じ。 あ、短寿命なループ変数とかに短いのを付けるのはべつにいいよ。 でもそういう変数じゃないのにjj4tmpが冒頭から千行下まで有効とかあるんですよホント。
732 名前:723 mailto:sage [2008/08/09(土) 16:50:25 ID:oDTW9Xf8] >>731 さすがにそれは、ご愁傷さま、としか言いようがないなw 関数 8000 行 switch 文一発な、悲惨なソースのメンテをしたことがある さらにまずいのが、VxWorks 使ったまっとうなハードリアルタイムシステム フラットに展開すりゃ速いってもんじゃねぇでしょwwW
733 名前:login:Penguin mailto:sage [2008/08/09(土) 17:22:27 ID:tDLp/wdz] -U__sh3__ -D__SH4__=1 これって何のオプションですか? うーんなんの効果あるんだろう
734 名前:723 mailto:sage [2008/08/09(土) 17:32:51 ID:oDTW9Xf8] >>733 そんなもん, コンパイル対象のソース読め
735 名前:login:Penguin mailto:sage [2008/08/09(土) 18:14:13 ID:jQO6ZRpp] だんだんスレチな話になってきたが そろそろIDEでも 変数のスコープを視覚化してくれてもよさげな気がするが どうだろう カッコ ( にカーソル合わせると対応する ) が光るように カーソルが変数にあるときにその変数が生きている領域が 背景ピンクになったりするモードとか
736 名前:login:Penguin mailto:sage [2008/08/09(土) 21:17:11 ID:aRNnaBVp] >>735 eclipseはやってくれるでしょ。
737 名前:login:Penguin mailto:sage [2008/08/11(月) 07:28:20 ID:FkXYROEy] ms-n.org/sh-linux/SH-Linux/kernel/former_version/linux-sh-2.4.26.tar.bz2 これコンパイルできる方法教えてw
738 名前:login:Penguin mailto:sage [2008/08/11(月) 20:45:59 ID:WiCmDl4U] >>714 >C++でもプロトタイプ宣言をすればちゃんとコンパイルが通ります。 通りません。 extern long double powl(long double, long double); ではだめなのでしょうか? Cの方は警告がでなくなりますが。
739 名前:login:Penguin mailto:sage [2008/08/12(火) 00:51:12 ID:cGgYRhoE] >>738 いい加減 「自分の環境がおかしいのか?」 とか探りを入れ始めろw 具体的にはだな...ぐぐれ!
740 名前:login:Penguin mailto:sage [2008/08/12(火) 00:53:46 ID:quAwsbyS] >>739 再現できる環境があります。 ttp://sh-linux.org/ ここからたどれるFedora7用のバイナリをインストールしてください。 コンパイルできるという環境の再現手順を教えてください。
741 名前:login:Penguin mailto:sage [2008/08/12(火) 01:05:03 ID:fIsUhGXw] >>740 どんだけ上から目線なんだ貴様はよw? お前消えろなんでもいいから消えろ そして2度この板くるな
742 名前:login:Penguin mailto:sage [2008/08/12(火) 01:10:34 ID:cFnTFx+t] もういい加減「SH4 環境だと g++ でコンパイル通りません」ネタはやめてくれ。 自分で何とかしてください。誰も答えられない(答えたくない)みたいだし。
743 名前:login:Penguin mailto:sage [2008/08/12(火) 01:25:50 ID:fIsUhGXw] >>740 今日からお前のsh4環境のみc++利用不可能になったから聞くな
744 名前:login:Penguin mailto:sage [2008/08/12(火) 10:18:33 ID:quAwsbyS] まぁ。俺はべつに動かなくても困らないが、 お前らは飯のタネなんじゃないの? ターゲットごとに我流の開発環境を作って、たまたま 自分のところが動いているという状況が今の SHの組み込み開発環境だろ。バッドノウハウ入りまくりで 誰も検証してない、できない。 つい2年程前までカーネルすら独自のツリーを維持してて 最近ようやくlinusのツリーに追従できるようになったけど、 その下のGNU ToolsやSDKは囲い込んだ開発者の中でのみ 流通しているパッチやノウハウが幅をきかせている状態。 誰でも検証できる標準開発環境がない。 いずれ、このままではルネサスのSDK以外に選択肢のない世界になるよ。 でぼったくられると。
745 名前:login:Penguin mailto:sage [2008/08/12(火) 10:20:31 ID:YIDfUhGW] 動かなくても困らないならスレを占拠しないでくれ。 動かないなら動かす方法を見つけて報告してくれ。
746 名前:login:Penguin mailto:sage [2008/08/12(火) 10:27:46 ID:ildnFlbr] 我流(笑)
747 名前:login:Penguin mailto:sage [2008/08/12(火) 10:51:33 ID:cFnTFx+t] >> 744 誰も答えてくれないからって説教ですか。 自分で何とかするか、他所でやってください。 ここに書いても解決しませんよ?
748 名前:login:Penguin mailto:sage [2008/08/12(火) 11:13:05 ID:gTn+Nr6V] >>738 extern "C" long double powl(long double, long double); では?
749 名前:login:Penguin mailto:sage [2008/08/12(火) 12:17:33 ID:rE3dKthG] あのー、お取込中失礼しやす。 やじゅうま根性丸出しで linux-sh-2.4をコンパイルしようとしたら、 しょぱなから、「コラッ sh-linux-gccが無いぞー」って叱られたんですが、 sh-linux-gccかsh4-linux-gcc のsourceどこかにコロガッテないでしょうか?
750 名前:login:Penguin mailto:sage [2008/08/12(火) 12:52:18 ID:quAwsbyS] >>748 ありがとうございます。動きました。 次は、これがバグなのか単に未実装なだけなのか。 問題があるとすればgccの問題なのか、glibcの問題かなのですが、 sh4には確かにglibc/sysdeps/i386/fpu/bits/mathinline.h に相当するものがなく空なのですが、一方i386の方もmathinline.h には今回話題にしているpowlなど一部のlong double数学関数はありません。 にもかかわらずi386ではエラーや警告が出ずにコンパイル できますが、sh4ではプロトタイプ宣言しないとエラーや 警告がでます。またsh4でも、powなどdouble系の数学関数では 問題ありません。 これはどう解釈すればよいのか...って興味ないですね。もうやめます。
751 名前:login:Penguin mailto:sage [2008/08/12(火) 12:55:05 ID:quAwsbyS] >>749 ttp://sh-linux.org/index.html ここからたどれる ttp://rpm.sh-linux.org/rpm-fc6/RPMS/i386/ とかどうですか?
752 名前:login:Penguin mailto:sage [2008/08/12(火) 13:16:16 ID:12QIDdDM] >>737 sh-linux-gccがある環境ならmakeできるはずだけど、うちの環境だとentry.Sの .rept NR_syscalls-(.-sys_call_table)/4 という部分がひっかかってビルドに失敗しますね。 celinux-040503では .rept NR_syscalls-221 になってるのだけど、そんな感じに修正したら一応ビルドできました。 ちなみに ttp://www.superh-linux.org/platforms/index.html にあるtoolchain_345.tar.bz2を使ってます。 >>749 GCC3.4.5でよければ ttp://www.superh-linux.org/download/index.html にSRPMがありますよ。 ところで他の方はSH4でGCC4系のビルドってどうしてるんですか?
753 名前:login:Penguin mailto:sage [2008/08/12(火) 13:25:30 ID:12QIDdDM] >>733 FPUなしのSH-4という意味で-m4-nofpuを指定すると、__SH4__がundefされて__sh3__が定義される という仕様になっているみたいなんだけど、そうするとifdef __SH4__みたいな部分が通らなくなるので その対策だと思います。
754 名前:login:Penguin mailto:sage [2008/08/12(火) 13:31:35 ID:3VsPTRH/] >>750 「sh4 自体が long な double に対応しているかどうか」 を、確かめようと思わのか? 基本的に、float 系は cpu がサポートしてなきゃ、ソフト エミュレーションになるってのは知ってる? ソフトエミュレーションは、死ぬほどトロくなるって知ってるか?
755 名前:login:Penguin mailto:sage [2008/08/12(火) 13:33:43 ID:quAwsbyS] >>754 CPUと命令としてですよね。もちろん対応していないのは 分かっています。なぜ自動的にソフトエミュレーションが 選択されないのか、ということを問題にしてます。
756 名前:login:Penguin mailto:sage [2008/08/12(火) 13:35:09 ID:quAwsbyS] >>752 >ところで他の方はSH4でGCC4系のビルドってどうしてるんですか? ネイティブ環境なら ttp://www.si-linux.co.jp/wiki/silinux/index.php?DebianSH と sh-linux.org/index.html が、誰でも検証できる環境ではないでしょうか?
757 名前:login:Penguin mailto:sage [2008/08/12(火) 13:35:44 ID:/I3o02N0] >>755 自動的にやられたらすごくトロくなるから。 だから、そういうのは明示的に対応する。
758 名前:login:Penguin mailto:sage [2008/08/12(火) 13:38:44 ID:quAwsbyS] >>757 自動的にソフトエミュになるほとんどのdoubleの数学関数については?
759 名前:login:Penguin mailto:sage [2008/08/12(火) 13:41:06 ID:r+kS6i0D] >>750 glibcの問題のような気がするが。 SHでlong double使う人がいないので発覚しなかっただけじゃないか。 ついでにi386のpowlはmathcalls.hに定義があったような気がする。
760 名前:login:Penguin mailto:sage [2008/08/12(火) 13:46:42 ID:3VsPTRH/] つか、なんで long double が必要なのか、そっちの理由が聞きたいwW
761 名前:login:Penguin mailto:sage [2008/08/12(火) 13:54:04 ID:ildnFlbr] そもそも -m4 な gcc では double = long double でどちらも一緒じゃないっけ?
762 名前:login:Penguin mailto:sage [2008/08/12(火) 14:11:11 ID:quAwsbyS] >>761 そうです。どちらもsizeof()は8です。 long doubleではわざと呼び出せないようにしてあると考えると納得が いきますね。libmのpowもpowlも64bitの引数をとるように しかできていなくて、もし将来128bitのlong doubleが導入されたときに ABI非互換になってしまう。 もっともlibmのほうはpowl@GLIBC3.0とかでなんとかできますが。
763 名前:login:Penguin mailto:sage [2008/08/12(火) 14:21:06 ID:quAwsbyS] >>760 >>676 で書いていますが、より具体的にかくと、 g++のソースで<math.h>をincludeして数学関数を呼び出している ソフトは世の中にごまんとある。それ自体は問題ないけれど、 sh4ではlong doubleの数学関数を呼び出すとコンパイルエラーになる。 ではパッチを書いて作者に送ろうかというときに、何と説明すればよいか。 彼らの環境(ほとんどはi386)では問題なくコンパイルできる。 sh4特有のツールチェインの問題ならそちらを直せと言われるのがオチ。 sh4がlong doubleをサポートしてないので直しようがないというのなら、 long doubleをサポートしていない環境があり、その環境でもコンパイル できるようにするためのパッチであることを説明すれば採用される可能性が高い。 ということです。long doubleをサポートしていない環境というのが、 どういう状況をさすのかも説明できないと、それをチェックするための configure.acを書けません。
764 名前:login:Penguin mailto:sage [2008/08/12(火) 14:21:39 ID:QgzDDaHN] >>762 浮動小数点に限ってはsizeofで返る値がが同じだからって 内部表現が同じなわけじゃないぞ。
765 名前:login:Penguin mailto:sage [2008/08/12(火) 14:37:32 ID:quAwsbyS] >>764 例えば、freebsd-users-jpで少し前に話題になった FreeBSD/i386でのlong doubleの丸めの問題でしょうか? 手元で簡単に試した限りではどちらもバイト列は 同じようです。
766 名前:login:Penguin mailto:sage [2008/08/12(火) 15:17:59 ID:QgzDDaHN] 残念ながら理解できていないようだ。