【エンベデッド】組込Lin ..
[2ch|▼Menu]
655:login:Penguin
08/08/05 11:49:10 rYf6YNyL
>>651
CPU次第かもだけど、2.6.19以降の方が簡単な可能性も
まっ、余計なお世話だな

656:login:Penguin
08/08/05 12:55:27 ndc1pKBx
すみません。教えてください。
sh4のgcc-4.1.2ネイティブコンパイラで
#include <math.h>
#include <stdio.h>
int main() {
long double a = 0.1L;
long double b = fabsl(a);
printf("%Lg\n", b);
return 0;
}
このコードをgccでコンパイルするとコンパイルできるのですが、
g++でコンパイルすると、
error: 'fabsl' was not declared in this scope
とコンパイルできません。この場合どうするのが正しいのでしょうか?

657:login:Penguin
08/08/05 13:43:03 U2kvFOrk
fabslをthis scopeの場所で定義してやればいい。
abs自体重要な関数でもないし自分で適当に定義して問題ない。

658:login:Penguin
08/08/05 13:48:42 ndc1pKBx
>>657
ありがとう。調べてみるとlong double系の関数は
fabslに限らずダメみたいですね。
さらに、sh4に限らずhppaとかでもlong double系の関数は
c++ではエラーになるみたいで、configureスクリプト内で
long double系の数学関数が存在するかチェックして、
なければdoubleで自分で定義しなおすのが通例のようでした。

659:login:Penguin
08/08/05 18:00:02 ndc1pKBx
すみません。やっぱり疑問です。

なぜgccではよくてg++ではだめなのでしょうか?
fabsl ではありませんが、例えば polw は
$ objdump -T /usr/lib/libm.so |grep powl
0002e8a0 w DF .text 0000006c GLIBC_2.2 cpowl
0002b040 w DF .text 00000274 GLIBC_2.2 powl
$ objdump -T /usr/lib/libstdc++.so.6 |grep powl
000c4e00 g DF .text 00000028 GLIBCXX_3.4 powl
なのに、やはりg++では
error: 'powl' was not declared in this scope
と言われてしまいます。

660:login:Penguin
08/08/05 18:47:43 v1bU+MY+
>>659
うちのシステムでは問題無く見えてるが。
どうでもいいけどfabslはbuilt-in関数ジャマイカ?

661:login:Penguin
08/08/05 18:55:51 ndc1pKBx
>>660
見えてるというのは、例えば
int main() {
long double a = 0.1L, b=0.2L;
long double c = powl(a,b);
printf("%Lg\n", c);
}
こんなコードを g++ a.c でコンパイルできるということでしょうか?
どんな環境でしょうか?こちらは gcc-4.1.2/glibc-2.6と
gcc-4.3.0/glibc-2.8ともsh4ネイティブ環境で、どちらもだめです。

>どうでもいいけどfabslはbuilt-in関数ジャマイカ?
確かにobjdumpしたら展開されてました。

662:login:Penguin
08/08/05 23:46:57 M5dmdWit
するとデフォルトのnamespaceの問題なのかな。
呼び方をpowl()ではなく::powl()にしてみては。

663:login:Penguin
08/08/05 23:54:25 BTkT9hjP
>>662
上のソースでpowlを::powlに、でしょうか?
やったけど変わりません。
すみません、C++よく分からなくて。

664:login:Penguin
08/08/06 02:48:40 ObK2LsR5
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
  long double a = 0.1L;
  long double b = abs(a);

  cout << b;
  return 0;
}


665:login:Penguin
08/08/06 05:41:13 90ScjHi6
>>664
つまりどういう事?

666:login:Penguin
08/08/06 10:52:09 5rbVEHAI
.hはC言語のヘッダファイルで
C++では.hをつけないんだけどね。

667:login:Penguin
08/08/06 11:20:35 AkO0dpZk
>>666
ここでは、そんなC++の一般知識を確かめているわけではないのだが...

668:login:Penguin
08/08/06 11:32:51 DuvSdRRq
>>662-663の受け答えを見るか切りではそんな一般知識も不足してそうだけどな。

669:login:Penguin
08/08/06 11:39:45 AkO0dpZk
>>688
では>>662はどのようにすればいいの?

670:login:Penguin
08/08/06 11:55:13 DuvSdRRq
>>669
math.hの関数はnamespaceを使ってない。
cmath使うなら::pow()になる。
末尾のlとかはつかん。

671:login:Penguin
08/08/06 12:01:41 AkO0dpZk
>>670
いや、だからC++でpowlを使いたいんだけど、libstdc++には定義があるようだし
どうすればいいのという話です。
libstdc++にあるのは偽者?

672:login:Penguin
08/08/06 12:38:29 MrWK8qGv
gcc の -m* オプションじゃまいか? -mlとか、SH4なら -m4とか。よくシランが。

673:f27e582e9c462b
08/08/06 13:05:51 8eTBydbW
>>1>>2ch:net>>>2ch.net>>>URLリンク(ip.tosp.co.jp)

674:f27e582e9c462b
08/08/06 13:06:58 8eTBydbW
>>1>>2ch:net>>>2ch.net>>>URLリンク(ip.tosp.co.jp)

675:login:Penguin
08/08/06 14:03:51 mCPIcfm+
>>671
なんで long double が必要なの?
そっちの理由が知りたい


676:login:Penguin
08/08/06 14:41:13 AkO0dpZk
>>675
そこにソースがあってコンパイルしたいから、ではダメですかね。例えば
URLリンク(www.debian.org)
これらの取り組みを否定するものではないでしょ?

677:login:Penguin
08/08/06 14:44:45 AkO0dpZk
あとは、すでに回避方法は >>658 で挙げてあるけど、
なぜ CとC++でコンパイルできたり出来なかったりする
のかという疑問に答えを出したい。

678:login:Penguin
08/08/07 00:23:53 YsvtngAO
>>677
多分前提が違う。
最初思い込みで既存の動いていたコードの話なのかと思ったけど、
>>656は一度でもg++で通ったと言ってるわけではない。

URLリンク(members.aon.at)
4.4.1. New headers replacing C-headers

URLリンク(www.linuxforums.org)

679:login:Penguin
08/08/07 01:06:49 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
08/08/07 02:12:27 AwAlKngr
>>671
テンプレート

681:login:Penguin
08/08/07 13:57:02 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
08/08/07 14:24:49 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
08/08/07 14:26:39 g6GIIrvN
>>拡張子.cpp : g++でもgccでもダメ
gccはフロントエンドだから拡張子をみるんでしょ。
cppだからg++を読んでる。

684:login:Penguin
08/08/07 14:32:26 jPayqA+W
要するにCじゃなきゃ通んないってことね?SHではなぜか。

685:login:Penguin
08/08/07 16:19:08 AwAlKngr
なんだ、よく読んだら人の話を聞かない頭でっかちさんかw

>>668, 670 を心して読め。
>>664 はコンパイル通ってるのか?

ひょっとして、同じソースコードが CとC++のコンパイラで
コンパイル出来る事を期待しているのか?
会社のプロジェクトだったら悲惨だな。
まぁ、人並みにがんがれ。w

686:login:Penguin
08/08/07 16:24:20 AwAlKngr
でも >>667 を見ると基礎はありそうな事を書いてはいるね。
こんなのが上司だったら即転職だなw

687:login:Penguin
08/08/07 16:24:52 g6GIIrvN
>>685
>ひょっとして、同じソースコードが CとC++のコンパイラで
>コンパイル出来る事を期待しているのか?

そうだよ。示したテストケースは簡略化したものだけど、
実際にはc++で書かれ<math.h>をincludeしてlong doubleの数学関数
を呼び出しているソースをコンパイルしたいのであって、
cmathを使え、long double は使うなというのはここで問題に
している話題ではない。

688:login:Penguin
08/08/07 16:41:58 g6GIIrvN
ちなみに
#include <cmath>
にしても i386 は powlとかの long double数学関数を呼べるし、
sh4ではコンパイルエラーになる。

なぜか?

689:login:Penguin
08/08/07 16:49:25 jPayqA+W
>>688
cmathの中で結局math.h読んでるからじゃない?

690:login:Penguin
08/08/07 16:50:35 jPayqA+W
あ、いや、忘れてくれ。

691:login:Penguin
08/08/07 16:52:28 KvEAlGj2
そもそも-mは何を指定してるんだ?

692:login:Penguin
08/08/07 16:53:40 g6GIIrvN
>long double は使うなというのはここで問題に
すみません。ここは取り消します。理解できました。


693:login:Penguin
08/08/07 16:54:14 g6GIIrvN
>>691
なにも。
何を指定すれば良いの?

694:login:Penguin
08/08/07 16:56:24 KvEAlGj2
>>693
何もってgccのビルド時に指定してないのか?
コンパイルオプション見ろよ。

695:login:Penguin
08/08/07 16:58:14 WjgH/Ftv
>>693
つ ヒント:32と64
manくらい見てから人に聞こうな

696:login:Penguin
08/08/07 17:03:48 g6GIIrvN
>>695
全然わかりません。SH特有のオプションに-m32とか-m64とかないですが。

>>694
sh4ネイティブ環境でコンパイルしたので、sh4ネイティブ用の
デフォルト値です。

697:login:Penguin
08/08/07 17:06:11 jPayqA+W
SH の-mに-mb -ml -m2,3とか以外の指定ってあったっけ?

698:login:Penguin
08/08/07 17:08:16 3ZyKP7zl
>>697
無いと思う

きっと>>695は勘違いしてるはず

699:login:Penguin
08/08/07 17:10:07 3ZyKP7zl
>>696
オプションはデフォルトではなく、環境にあわせて指定した方が良いですよ

700:login:Penguin
08/08/07 17:11:36 g6GIIrvN
私の無知もあったので問題を再整理します。

C++で<math.h>をincludeしてlong double系の数学関数(たとえばpowl)を
呼び出しているソースがあります。これをi386でコンパイルすると
コンパイルできるのですが、sh4でコンパイルするとコンパイルできません。

回避方法として、powlをdoubleのpowで#defineする方法があります。
解決方法として、<cmath>にしてpowのテンプレートを使う方法があります。

疑問点として、なぜsh4でpowlがc++から呼び出せないのでしょうか。

です。

701:login:Penguin
08/08/07 17:19:20 g6GIIrvN
>>699
例えば
URLリンク(sh-linux.org)
ここのパッケージはspecファイルに何も書いていないので、
デフォルト値が採用されているのですが何かまずいですか?

私の場合トイ用途なので、特定のCPUに追い込んだ設定は必要無いのです。

702:login:Penguin
08/08/07 17:50:49 EN5PuvqY
gnu系の知識はないが、
SH4って安物以外はFPU内蔵で、FPU命令かソフトで実現か選ぶ必要があるとか?

703:login:Penguin
08/08/07 19:22:03 AwAlKngr
math関数は target依存じゃなかったかな?(多分...)
この場合(テンプレート未使用時)、C++ から C関数を使う事になるのか?
とすると extern "C" か...

704:login:Penguin
08/08/07 19:28:55 g6GIIrvN
>>703
後出しと言われるかもしれませんが、extern "C" {} で囲むのは
最初にやってだめでした。

705:login:Penguin
08/08/07 20:02:21 g6GIIrvN
一方sh4のCからのpowlの呼び出しの方も、
warning: incompatible implicit declaration of built-in function ‘powl’
と警告がでます。でもlibmにはpowlの定義があるのでリンクできてしまいます。
確かに、math.h(から読み込まれるbits/mathcalls.h)にはpowlの
定義はありません。

もしかして意図していない関数をリンクしているという事なのでしょうか。

706:login:Penguin
08/08/07 20:12:32 g6GIIrvN
>>705
i386も同様にpowlは見つかりませんね。
build-inといってるからgccの中なのかな。

./gcc/builtins.def
これか。でもtarget依存のようには見えないけど。

707:login:Penguin
08/08/07 22:04:56 AwAlKngr
環境が違うみたいだから、さいなら...
うちは gcc-3.4.5 の x86_64-pc-linux-gnu クロス環境。
glibc-2.3.5。
>>703 でコンパイル & リンク確認。

708:login:Penguin
08/08/07 22:14:35 KvEAlGj2
>>698
>>702も言ってるがm4とm4-nofpuの指定があるとおもったけど、なくなったの?

709:login:Penguin
08/08/07 22:34:16 AwAlKngr
>>708
あるよ。
ほかにも色々。

710:login:Penguin
08/08/07 22:45:20 g6GIIrvN
>>708
あるけど、-m4でしかコンパイルしていない。
cc1plus: error: command line option ‘-m4-nofpu’ is not supported by this configuration

こうなる。

711:login:Penguin
08/08/07 23:37:33 XTerfC5k
--target-help見てないなら無い
それだけだあるのにビルドできんのは
何か不足してるんでしょ

712:login:Penguin
08/08/08 00:57:27 MljPKlSM
RTL8139DってWAL
対応してないですよね?

713:login:Penguin
08/08/08 05:47:12 GQVMFxS/
>>705
その警告が出るということは、見に行くヘッダが間違ってないか?
ホスト環境の方見てるとか。


714:login:Penguin
08/08/08 22:43:11 o2c8kFjg
>>705
その警告の通り、ヘッダには定義がないが、ライブラリ自体には実装しているということです。
C++でもプロトタイプ宣言をすればちゃんとコンパイルが通ります。
i386で正常にコンパイルが通るのは、ちゃんとヘッダ(mathinline.h)に定義があるからです。
このファイルは機種依存のファイルで、glibcのソースでは、sysdeps/(アーキテクチャ)/fpu/bits/以下にあります。
おそらく、このファイルがないアーキテクチャではSHのような症状になるのではないでしょうか。


715:login:Penguin
08/08/09 00:04:29 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
08/08/09 00:26:09 IYvljXAp
>>215
作業量で値段はかるのイクナイ!(><)

250万以上の利益を得られる見込みで委託してたのなら、動いた以上は
四の五言わず払ってやれ。もしヘボ作業だとしても、そんなのしか
見つけられない自分を反省して、次からはそこは声かけないようにすればおけ。

それはともかく、そのコードの妥当性は開発規模次第。
かなり大きな開発でなら、試行錯誤する準備の過程で手を付けてはみたが
%

717:login:Penguin
08/08/09 00:27:05 IYvljXAp
最近2ちゃんは記事切れまくるな。

(続き)
それはともかく、そのコードの妥当性は開発規模次第。
かなり大きな開発でなら、試行錯誤する準備の過程で手を付けてはみたが
結局関数名を変えて場所を作っただけに終わったとかよくあること。

自社製品とか、自分が永続的に関わる製品なら隅々まできれいにするけど、
一回きりの外注委託でそこまで気合の入った整理整頓なんか誰もしないよ。


718:login:Penguin
08/08/09 00:34:42 tDLp/wdz
>>716
Bランク75.4万/1人月でこのコードレベルですよ
それになんだか意味のないコード大量につまってるし
金額とこの質だとかなりむかつきませんか?

719:login:Penguin
08/08/09 00:38:10 644OQC1c
やくざな世界だ

720:login:Penguin
08/08/09 01:09:14 q9GjTE39
>>718
問い詰めりゃいいじゃん。
つーか納品時にレビューぐらい普通やらないか?


721:login:Penguin
08/08/09 01:10:49 IYvljXAp
月75万なんて底辺だろ。
中国・インドのクラスに近い。あっちはIT系仕事だと30万とかもあるが、
組み込みでその値段はちょっといかがなものかと。組み込みスレだから
ITじゃなくて組み込み系の仕事だという前提でだけど。

つか、発注内容はなんだったの?

722:login:Penguin
08/08/09 01:15:56 IYvljXAp
>>720
底辺をなめるなっ・・・!

奴らは変数にj1,jj1,jj2,jj3,jj4tmpとか平気で書くんだぞ。
何千行ある関数だってものともしない。計算法違いの指摘で
「例えば4の時は13になる」というとif(n==4)return 13;と
冒頭に書いてOKにする。

更に最悪なのは、指摘しても「?」という顔で全然判ってないこと。
こっちがストレスで先に死ぬわ。


723:login:Penguin
08/08/09 01:50:03 oDTW9Xf8
>>722

割り算やって商と譲与を求める場合は、p, q で無問題
時間に関する変数は t? で ok
任意の個数を表す場合は n? で全然 ok
ループ変数は i? でかまわない
長さを表す場合は l?, s? でいいし
固有の係数を表す場合は k? でok

何か問題があるのか?


724:login:Penguin
08/08/09 02:06:14 7rWDtXOs
fortranかよw

725:login:Penguin
08/08/09 02:10:18 T3JR40W3
>>723
すごいね。
一緒に仕事したくないタイプだなw
絶対に...死んでも...w

726:login:Penguin
08/08/09 08:40:47 e8hz21eJ
スコープによるだろ

727:login:Penguin
08/08/09 09:07:37 oDTW9Xf8
>>725
数値演算やってる関数で長い変数名つけてるの見るとムカつく
長い名前つけるくらいだったらコメントに解いてる数式書いておけ


728:login:Penguin
08/08/09 09:30:10 CoNuCxIk
確かに一緒に仕事したくないってことで

729:login:Penguin
08/08/09 10:23:55 7rWDtXOs
>>727

iCounter++ とかw、あるある。なんで素直に i++と書けんのかと。

730:login:Penguin
08/08/09 10:53:04 /CZ0V8cN
組み込み系のアウトソーシングスレになってきたな。

受け入れ側チームで評価、テストを厳密にしないと
カネだけ取られちゃうだろうね。


731:login:Penguin
08/08/09 11:26:54 IYvljXAp
>>723
書き方が悪かった、すまん。
計算法、といってもそういう数値計算なら俺もそういう数学的記法にするが、
普通のアプリ的な処理方法でそういう記法をしてくるってこと。正直市ねって感じ。

あ、短寿命なループ変数とかに短いのを付けるのはべつにいいよ。
でもそういう変数じゃないのにjj4tmpが冒頭から千行下まで有効とかあるんですよホント。


732:723
08/08/09 16:50:25 oDTW9Xf8
>>731
さすがにそれは、ご愁傷さま、としか言いようがないなw

関数 8000 行 switch 文一発な、悲惨なソースのメンテをしたことがある
さらにまずいのが、VxWorks 使ったまっとうなハードリアルタイムシステム
フラットに展開すりゃ速いってもんじゃねぇでしょwwW


733:login:Penguin
08/08/09 17:22:27 tDLp/wdz
-U__sh3__ -D__SH4__=1
これって何のオプションですか?
うーんなんの効果あるんだろう

734:723
08/08/09 17:32:51 oDTW9Xf8
>>733 そんなもん, コンパイル対象のソース読め


735:login:Penguin
08/08/09 18:14:13 jQO6ZRpp
だんだんスレチな話になってきたが
そろそろIDEでも 変数のスコープを視覚化してくれてもよさげな気がするが
どうだろう
カッコ ( にカーソル合わせると対応する ) が光るように
カーソルが変数にあるときにその変数が生きている領域が
背景ピンクになったりするモードとか

736:login:Penguin
08/08/09 21:17:11 aRNnaBVp
>>735
eclipseはやってくれるでしょ。

737:login:Penguin
08/08/11 07:28:20 FkXYROEy
URLリンク(ms-n.org)

これコンパイルできる方法教えてw

738:login:Penguin
08/08/11 20:45:59 WiCmDl4U
>>714
>C++でもプロトタイプ宣言をすればちゃんとコンパイルが通ります。
通りません。
extern long double powl(long double, long double);
ではだめなのでしょうか?

Cの方は警告がでなくなりますが。

739:login:Penguin
08/08/12 00:51:12 cGgYRhoE
>>738
いい加減 「自分の環境がおかしいのか?」 とか探りを入れ始めろw
具体的にはだな...ぐぐれ!

740:login:Penguin
08/08/12 00:53:46 quAwsbyS
>>739
再現できる環境があります。
URLリンク(sh-linux.org)
ここからたどれるFedora7用のバイナリをインストールしてください。

コンパイルできるという環境の再現手順を教えてください。


741:login:Penguin
08/08/12 01:05:03 fIsUhGXw
>>740
どんだけ上から目線なんだ貴様はよw?
お前消えろなんでもいいから消えろ
そして2度この板くるな

742:login:Penguin
08/08/12 01:10:34 cFnTFx+t
もういい加減「SH4 環境だと g++ でコンパイル通りません」ネタはやめてくれ。
自分で何とかしてください。誰も答えられない(答えたくない)みたいだし。


743:login:Penguin
08/08/12 01:25:50 fIsUhGXw
>>740
今日からお前のsh4環境のみc++利用不可能になったから聞くな

744:login:Penguin
08/08/12 10:18:33 quAwsbyS
まぁ。俺はべつに動かなくても困らないが、
お前らは飯のタネなんじゃないの?

ターゲットごとに我流の開発環境を作って、たまたま
自分のところが動いているという状況が今の
SHの組み込み開発環境だろ。バッドノウハウ入りまくりで
誰も検証してない、できない。

つい2年程前までカーネルすら独自のツリーを維持してて
最近ようやくlinusのツリーに追従できるようになったけど、
その下のGNU ToolsやSDKは囲い込んだ開発者の中でのみ
流通しているパッチやノウハウが幅をきかせている状態。
誰でも検証できる標準開発環境がない。

いずれ、このままではルネサスのSDK以外に選択肢のない世界になるよ。
でぼったくられると。

745:login:Penguin
08/08/12 10:20:31 YIDfUhGW
動かなくても困らないならスレを占拠しないでくれ。
動かないなら動かす方法を見つけて報告してくれ。

746:login:Penguin
08/08/12 10:27:46 ildnFlbr
我流(笑)

747:login:Penguin
08/08/12 10:51:33 cFnTFx+t
>> 744
誰も答えてくれないからって説教ですか。
自分で何とかするか、他所でやってください。
ここに書いても解決しませんよ?


748:login:Penguin
08/08/12 11:13:05 gTn+Nr6V
>>738
extern "C" long double powl(long double, long double);
では?


749:login:Penguin
08/08/12 12:17:33 rE3dKthG
あのー、お取込中失礼しやす。
やじゅうま根性丸出しで
linux-sh-2.4をコンパイルしようとしたら、
しょぱなから、「コラッ sh-linux-gccが無いぞー」って叱られたんですが、
sh-linux-gccかsh4-linux-gcc のsourceどこかにコロガッテないでしょうか?

750:login:Penguin
08/08/12 12:52:18 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
08/08/12 12:55:05 quAwsbyS
>>749
URLリンク(sh-linux.org)
ここからたどれる
URLリンク(rpm.sh-linux.org)
とかどうですか?

752:login:Penguin
08/08/12 13:16:16 12QIDdDM
>>737
sh-linux-gccがある環境ならmakeできるはずだけど、うちの環境だとentry.Sの
.rept NR_syscalls-(.-sys_call_table)/4
という部分がひっかかってビルドに失敗しますね。
celinux-040503では
.rept NR_syscalls-221
になってるのだけど、そんな感じに修正したら一応ビルドできました。

ちなみに
URLリンク(www.superh-linux.org)
にあるtoolchain_345.tar.bz2を使ってます。

>>749
GCC3.4.5でよければ
URLリンク(www.superh-linux.org)
にSRPMがありますよ。

ところで他の方はSH4でGCC4系のビルドってどうしてるんですか?


753:login:Penguin
08/08/12 13:25:30 12QIDdDM
>>733
FPUなしのSH-4という意味で-m4-nofpuを指定すると、__SH4__がundefされて__sh3__が定義される
という仕様になっているみたいなんだけど、そうするとifdef __SH4__みたいな部分が通らなくなるので
その対策だと思います。


754:login:Penguin
08/08/12 13:31:35 3VsPTRH/
>>750
「sh4 自体が long な double に対応しているかどうか」
を、確かめようと思わのか?
基本的に、float 系は cpu がサポートしてなきゃ、ソフト
エミュレーションになるってのは知ってる?
ソフトエミュレーションは、死ぬほどトロくなるって知ってるか?


755:login:Penguin
08/08/12 13:33:43 quAwsbyS
>>754
CPUと命令としてですよね。もちろん対応していないのは
分かっています。なぜ自動的にソフトエミュレーションが
選択されないのか、ということを問題にしてます。

756:login:Penguin
08/08/12 13:35:09 quAwsbyS
>>752
>ところで他の方はSH4でGCC4系のビルドってどうしてるんですか?
ネイティブ環境なら
URLリンク(www.si-linux.co.jp)

URLリンク(sh-linux.org)
が、誰でも検証できる環境ではないでしょうか?

757:login:Penguin
08/08/12 13:35:44 /I3o02N0
>>755
自動的にやられたらすごくトロくなるから。
だから、そういうのは明示的に対応する。

758:login:Penguin
08/08/12 13:38:44 quAwsbyS
>>757
自動的にソフトエミュになるほとんどのdoubleの数学関数については?

759:login:Penguin
08/08/12 13:41:06 r+kS6i0D
>>750
glibcの問題のような気がするが。
SHでlong double使う人がいないので発覚しなかっただけじゃないか。

ついでにi386のpowlはmathcalls.hに定義があったような気がする。


760:login:Penguin
08/08/12 13:46:42 3VsPTRH/
つか、なんで long double が必要なのか、そっちの理由が聞きたいwW


761:login:Penguin
08/08/12 13:54:04 ildnFlbr
そもそも -m4 な gcc では double = long double でどちらも一緒じゃないっけ?

762:login:Penguin
08/08/12 14:11:11 quAwsbyS
>>761
そうです。どちらもsizeof()は8です。

long doubleではわざと呼び出せないようにしてあると考えると納得が
いきますね。libmのpowもpowlも64bitの引数をとるように
しかできていなくて、もし将来128bitのlong doubleが導入されたときに
ABI非互換になってしまう。

もっともlibmのほうはpowl@GLIBC3.0とかでなんとかできますが。

763:login:Penguin
08/08/12 14:21:06 quAwsbyS
>>760
>>676で書いていますが、より具体的にかくと、

g++のソースで<math.h>をincludeして数学関数を呼び出している
ソフトは世の中にごまんとある。それ自体は問題ないけれど、
sh4ではlong doubleの数学関数を呼び出すとコンパイルエラーになる。
ではパッチを書いて作者に送ろうかというときに、何と説明すればよいか。

彼らの環境(ほとんどはi386)では問題なくコンパイルできる。
sh4特有のツールチェインの問題ならそちらを直せと言われるのがオチ。
sh4がlong doubleをサポートしてないので直しようがないというのなら、
long doubleをサポートしていない環境があり、その環境でもコンパイル
できるようにするためのパッチであることを説明すれば採用される可能性が高い。

ということです。long doubleをサポートしていない環境というのが、
どういう状況をさすのかも説明できないと、それをチェックするための
configure.acを書けません。

764:login:Penguin
08/08/12 14:21:39 QgzDDaHN
>>762
浮動小数点に限ってはsizeofで返る値がが同じだからって
内部表現が同じなわけじゃないぞ。

765:login:Penguin
08/08/12 14:37:32 quAwsbyS
>>764
例えば、freebsd-users-jpで少し前に話題になった
FreeBSD/i386でのlong doubleの丸めの問題でしょうか?

手元で簡単に試した限りではどちらもバイト列は
同じようです。


766:login:Penguin
08/08/12 15:17:59 QgzDDaHN
残念ながら理解できていないようだ。

767:login:Penguin
08/08/12 15:22:53 quAwsbyS
>>766
では理解できるように説明をお願いします。
違う例を示していただくだけでも構いません。

768:login:Penguin
08/08/12 22:02:27 12QIDdDM
>>764
ふつーIEEE754だからbit数が同じなら内部表現も同じだと思ってたんだけど違うのか…
それともnativeが非IEEE754の場合の可能性の話かな?


769:login:Penguin
08/08/12 22:53:33 cGgYRhoE
完璧に 「知ったか」 and 「人の話聞きたくない」 って事だな。
>>703-704 はどんなコードを書いたんだ?
もう出てくんな! ぼけ!

770:login:Penguin
08/08/12 23:29:27 quAwsbyS
>>769
ではあなたの見解を具体的にどうぞ。あなたの話を聞きますから。

771:login:Penguin
08/08/13 00:01:22 OLXEqpOH
聞いていることが違いましたね。
どんなコードを書いたかですが、最初はpowlの呼び出し部分をくくりだして
extern "C" {}でCのスコープにしました。
その後の指摘で、C++のスコープのままextern宣言だけをCのスコープに
してコンパイルが通りました。しかしこの方法は正しくないのでは
というのが、その後の議論です。



772:login:Penguin
08/08/13 00:44:46 2bMBgc9o
もうやめろ...
無駄にスレを消費するな。
おまえんちのチラシの裏にでも書いとけ、なっ?
ここはおまえだけのスキルアップの場ではない。

773:login:Penguin
08/08/13 00:56:18 O0b4ci2a
そらまあコーダーが仕事の憂さを素人を叩いて晴らす場所に
連投されちゃかなわんな。

774:login:Penguin
08/08/13 01:06:16 ANRbGy9O
というかGCCスレに行った方がいいんでないの?

GCCについて part8
スレリンク(tech板)


775:login:Penguin
08/08/13 01:40:50 MtXRM1Es
rpm-fc6/RPMS/sh4

とかありますけど、自分でカーネルのビルドとかの
方法がいまいちわかりませn
どの辺に載ってるのですか?

776:login:Penguin
08/08/16 02:20:14 IhGJwozp
URLリンク(ms-n.org)

これってどうやってbootするのですかね?

777:login:Penguin
08/08/16 15:17:06 IhGJwozp
Fatal: First boot sector is version 20.0. Expecting version 21.4.
ってで困ってます。
20.0用のlilo.x86持っている方いただけませんかねお願いします


778:login:Penguin
08/08/16 21:12:59 teEHGgQB
>>776
URLリンク(www.sh-linux.org)
p.28を見れ

779:login:Penguin
08/08/17 00:42:43 3jPdgluq
>>778
見てみたのですが、liloを打ち込む想定環境が
flush romに入ってるbusyboxのようです
当方の環境ではflushにiplのみ入ってる状態ですの
この場合のliloてどうすればいいんでしょうかね?

780:login:Penguin
08/08/17 00:53:51 S5vVejH8
>>779
boot.bをCFから拾ってホスト側で書く。
たしか20あたりのliloじゃないとダメだったような気がするが。


781:login:Penguin
08/08/17 00:59:36 3jPdgluq
>>780
えーとboot.bをCFから拾ってくるって言うのは
lilo.confにinstall=を書けってことであってますか?

lilo難しい


782:login:Penguin
08/08/17 12:50:33 S5vVejH8
CFにSHのboot.bが入っているはずなので、
それを使うようにinstallに書いとけばいいはず。

sh-liloなんてずっと使ってないからよう覚えてないわ。


783:login:Penguin
08/08/17 19:24:34 3jPdgluq
>>782
なるほどなるほど
でもですねそうすると
start kernel parameter setting
Jumping kernel image
お亡くなり

って感じです何がいけないんでしょうかね

784:login:Penguin
08/08/17 22:03:20 3jPdgluq
mapとboot.bの関係が解らないです。
元のlinuxがkernel 2.4.2で今試そうとしているのが
kernel 2.6.23です。

boot.bとmapはどれ使えばいいのですかね?

785:login:Penguin
08/08/18 00:50:33 JDcnqxSD
>>784
少しは自分で調べるなり、考えるなりしなよ。
つまずく度に質問してるじゃん。
向いてないんじゃないの?


786:login:Penguin
08/08/24 23:32:23 Rm9g9NOE
2.6系だとカーネルのチューニングってどうしてます?
参考になる情報って何があるのでしょうか
勘と経験しかない?

787:login:Penguin
08/08/28 05:49:54 uAqu/EdZ

Debian/Ubuntu 系でお聞きします。

Essential な Package だけ、っつーか、
とにかく、apt-get ができるだけの超最低環境が作りたいのです。
極端な話、それでどうやって操作するのかは疑問ですし、
このあたりがないとそもそも apt-get が動かないような気がしますが、
login/getty/bash あたりの必須コンボすら、別になくてもOK。

とにかく、どんなに意味不明な内容でもいいので、
・apt-get が動く。
・小さい。小さい。小さい。
こんなのが作りたい。

作り方( or もう既にどこかにあるよ)、教えてください。



788:age
08/08/28 07:31:15 uAqu/EdZ
age

789:login:Penguin
08/08/28 08:32:03 PTegQfA9
>>787
base.tgzばらして試行錯誤。


790:login:Penguin
08/08/28 09:28:19 s762wzrS
debootstrapかな。
まだ削れるのもいくつか入るけど、
依存関係で最低限というわけにはいかない。
dpkgだけなら、busyboxにもあるけど。

791:787
08/08/28 17:26:14 uAqu/EdZ

うーん、debootstrap っすか。
これでつくると、数十メガバイトなんだよな、、、。

今思いついたんだけど、
たとえば、自力でapt-get できる必要性はないんだよな。
たとえば、開発用Debianが C:で、組み込み用が D: だとする。
ようは、C: の apt-get/wget をつかって、D: に
必要なアプリが入ればいいんだよ。

とにかく、せいぜ10MBぐらいのDebianって作れないですかね。

ちなみに、base.tgz ってなんですか?
ググったら、某U川氏の pbuilder が引っかかりましたけど、これ?






792:login:Penguin
08/08/28 21:05:36 Q8MYgHTM
>>791
最小のカーネルを作る
最小のユーザランドを作る

以上

793:login:Penguin
08/08/28 22:18:54 GEl2a1Ny
usl-5p iohack版でtcpdump動く人いませんか?
/dev/bpf0が無いととんでもないこと言われます。

iproute_each.debもあればください

794:login:Penguin
08/08/28 22:48:20 TDYWiYwS
>>791
べつにDebianがほしいわけじゃないんだよね?
↑にもbusyboxって書いてるけど
URLリンク(buildroot.uclibc.org)
これをとっかかりにするのがいいかと。

795:787
08/08/29 05:36:49 1zKWN2K0
>>794

ええっと、それだと Binary のPackageがつかえませんよね?
Gentooみたいに、全部ソースからコンパイルするってことになる。

そうじゃなくって、
私がやりたいのは、
出来合いのBinary Packageで、
たとえば、Apache「だけが」動く Flash ROMのイメージとか、
Sendmail「だけが」動く、、とか、
それに加えて、Python も動く、、、とか、、、
そんなのが、自分の指定どおりに
自由に作れるようなやつがほしいんですよ。

あと、いま開発用のメインがDebianなんで、Debian/Ubuntu系だと
うれしい。



796:login:Penguin
08/08/29 09:14:06 wBqLAWzK
apt動くまでの環境作ればいいじゃん
10M収まるか知らないけど

797:login:Penguin
08/08/29 09:45:42 2UecGabJ
>>791
それはDebianではないね。

Debianでなくていいなら、
debootstrapした後に不要なものを自分で削ればいいじゃないか。
動かしたいものの詳細な知識なしにコンパクトカスタマイズは無理だけどな。


798:login:Penguin
08/08/29 09:47:12 2UecGabJ
>>793
自分でつくればぁ。


799:login:Penguin
08/08/29 09:56:17 XB7+MkSJ
>>795
Debian既成のパッケージだけで10Mは無理。 カーネルだけで30M以上ある。 
Pythonだけだって10M近い。 とりあえず、自分のシステム上で
dpkg -s パッケージ名 | grep Installed-Sizeでそれぞれがどれだけの大きさを
占めているのか把握したほうがいい。

800:login:Penguin
08/08/29 10:35:10 wBqLAWzK
initrdに詰め込むとか

801:login:Penguin
08/08/29 22:15:12 MNt4MuE2
sh4-unknown-linuxだと
configure がbuild system辺だ直せって
怒られます。どこなおせばいいぉ?

802:login:Penguin
08/08/29 23:05:24 vqkqgiP+
>>801
>どこなおせばいいぉ?
エスパーにしか分からない質問をするおまえの頭

803:login:Penguin
08/08/30 08:44:48 2VCoYTof
>>787
フラッシュメモリベースシステムをDebianで組もうと
まったく同じ試みをしたけど、

 努力するより1GBのCF買った方が早い

と気づいた俺。

ちゃんとDebian的機構を残そうとすると100MB程度は絶対に超えてくる。
で、そこをbusyboxとか使ってクリアしようとしても、アプリパッケージを
入れる段階で依存パッケージがぞろぞろ付いてきて破綻する。

結局頑張っていくとipkgな方向にならざるを得ないんだよな。
あれってuclibcなグレードダウン版debianに他ならないわけで。

804:login:Penguin
08/08/30 10:21:26 ty/51JYD
>>787
FedoraCoreでCFにそんな感じのシステムを作ってみた。16MBでおさまるね。
いちおうshがうごいてネットも出来るから、あとは好きなアプリを入れれば
何でもできそうだ。

805:787
08/09/01 12:38:26 JrV6mK+Y
>>804

kwsk, please!.


806:804
08/09/01 13:02:37 5PGfEcQW
>>805
詳しく説明するのも恥ずかしいぐらいの内容なんだけど、loginもgettyもいらないと書いてあったので、
単にinitの代わりに/bin/shを呼んだだけなんだ。さらに上の方でも紹介されてたけど、/bin/nashの機能
で済むならinitrdを改造してしまう方法もある。どの道Bootデバイスによってはinitrdの再構成は必要だからね。

ローダがgrubならmeni.lstのkernel行でinit=/bin/shと書いておく。カーネル起動後にinitの代わりに/bin/sh
が呼び出されたとき、dllの解決が出来るよう /libに必要なsoを置いておく。そうするとカーネルがロード
された直後にshのプロンプトが表示されるよ。その状態でinit=/bin/shの代わりになにかshのスクリプトを
起動すれば、何でも起動できる。その方法で前に試したとき、xtermが起動するのに必要だったCF容量は
40MBぐらいだったと思う。

こんなんで、どうだす?

807:login:Penguin
08/10/11 13:40:47 UQ3K470t
crosstoolを使ってSH4の環境を作ろうとしています。
demo-sh4.shにあるgcc-4.1.0では問題なくツールチェインが
ビルドできるのですがgcc-4.3.2やgcc-4_3-branch
ではエラーが出てコンパイルが止まってしまいます。

gcc-4.3系のクロス環境が欲しいのですが、
クロス環境って新しい環境ではあまりテストされていない
のでしょうか?


808:login:Penguin
08/10/12 18:36:37 hUtrnl8K
crosstool-NGではどうですか?


809:login:Penguin
08/10/13 00:49:05 VaL2RIfB
>>807
gmpとmpfrは入れてる?

810:login:Penguin
08/10/14 00:26:10 JJ9HyrmT
>>808,809 情報ありがとうございます。

>>808
./sysdeps/unix/sysv/linux/sh/sys/user.h:24:22: error: asm/user.h: No such file or directory
で止まってしまいます。どのような設定で成功されているのでしょうか。
.configを教えていただけないでしょうか。

>>809
hostのほうですよね。gmp-4.2.2とmpfr-2.3.0が入っています。crosstool-0.43では
cc1: error: unrecognized option `-Wold-style-definition'
で止まってしまいます。どのような設定で成功されているのでしょうか。


811:login:Penguin
08/10/14 01:58:56 JJ9HyrmT
>error: asm/user.h: No such file or directory
の方は、kernelが2.6.25から make headers_installで
asm/user.h をインストールしなくなったからのようで、
glibcの方を修正する必要がありそうです。

とりあえず2.6.24にしたところ、今度は
[ALL ] make[1]: ディレクトリ `/home/hage/tmp/cross/gcc/crosstool-ng-1.2.4/targets/sh4-unknown-linux-gnu/build/build-cc-core-shared/gcc' に入ります
[ALL ] make[1]: *** ターゲット `libgcc.mk' を make するルールがありません. 中止.
[ALL ] make[1]: ディレクトリ `/home/hage/tmp/cross/gcc/crosstool-ng-1.2.4/targets/sh4-unknown-linux-gnu/build/build-cc-core-shared/gcc' から出ます
[ERROR] Build failed in step 'Installing shared core C compiler'
で止まってしまいます。

812:login:Penguin
08/10/14 12:07:33 9yMCg6/j
>>810
croostoolでgcc-4.3.2だと失敗したから、自分は別の方法を試したよ。

813:login:Penguin
08/10/15 20:23:29 sA/RGAQm
gcc-4.3.2にいく前にgcc4.1.0+glibc-2.3.6をbuild+installするといいみたいだよ。

814:login:Penguin
08/10/17 20:53:45 gCPDrz2q
>>813
それは例えば gcc-4.1.0とglibc-2.3.6を /usr/sh-linuxなどにインストールした場合、
gcc-4.3.2のconfigureで --includedir=/usr/sh-linux/include をつければよい
ということでしょうか?

*** ターゲット `../.././gcc/libgcc.mvars' を make するルールがありません. 中止.
ということになってしまうのですが、先にインストールしたgccとglibcをどのように
活用すればよいのでしょうか。



815:login:Penguin
08/10/17 22:36:07 du1hENzw
crosstoolのスクリプト書き換えて、最後にgcc-4.3.2をbuildするようにしてみただけ。

816:login:Penguin
08/10/21 17:40:00 ZuNWStjb
このパッチがglibc作るときの肝みたい。
URLリンク(www.kegel.com)

817:login:Penguin
08/10/21 23:28:54 ZuNWStjb
crosstool-NGだとstep.mkのlibc_headersをgccのbuildの前に持っていくと少しよくなるみたい。

818:login:Penguin
08/10/23 00:12:50 7xU7iXWK
なぞなぞみたいなレスばかりで大変でしたが、なんとかsvn版の
crosstool-ngに4つ程パッチを当ててcross版shのgcc-4.3.2が
ビルドできました。ありがとうございました。

819:login:Penguin
08/10/28 14:47:59 jMsnT7YX
>>818
おい兄弟。ビルド祝いに『自分で作るLinuxOS最新版』をおまいにプレゼントだ。

【第3部】 ディジタル機器向けの自分Linux
  < 第1章 > 組み込みに挑戦
   《 Part1 》 なぜ組み込まれるのか
   《 Part2 》 組み込み機器開発手法とクロス開発
   《 Part3 》 SH-4向けにクロス・コンパイル
   《 Part4 》 PowerPC向けにクロス・コンパイル
   《 Part5 》 PS3用にクロス・コンパイル
URLリンク(ec.nikkeibp.co.jp)

820:login:Penguin
08/10/29 08:57:27 RcVJMXNd
>>819
なんかコンパイル方法とかインストール方法ばかりで内容薄そう。
ポーティングとデバッグについて語る本はないのか?

821:login:Penguin
08/10/29 23:23:20 NIQ76E60
第3部は古さが目についたけど…

822:login:Penguin
08/10/30 00:14:13 RkR37X0O
SH4で__fpscr_valuesの置き場所は、libcとld.soでどちらに置くべきか
という論争は結局libcで落ち着いたのでしょうか?

debianは URLリンク(patch-tracking.debian.net) で見るとglibcに持ってる
crosstool-ngもglibcにパッチ当ててる
uClibcも自分で持ってる

某所のetchバイナリでは確かld.so側だった気が...

823:login:Penguin
08/10/30 00:22:27 OyfjnZjS
>>822
echo "no-z-defs=yes" > configparms

824:login:Penguin
08/10/30 00:28:32 RkR37X0O
>>823
それ、呪文のようにいつも書かれていてよく分かってないのですが、
どっちでもOKなように未定義を許可する、という意味なのでしょうか?

825:login:Penguin
08/10/30 00:41:39 OyfjnZjS
>>824
URLリンク(www.ebimemo.net)

crosstool-0.43/sh4.dat
を見てみな。

826:login:Penguin
08/10/30 00:46:44 RkR37X0O
>>825
うん。だから、それはglibcにパッチを当てずにglibcをコンパイルする
方法だよね。>>822で言いたいのは、えびめも以外はもう
libcにパッチを当てる方向で趨勢が決まってしまったの?
ということです。

827:login:Penguin
08/10/30 00:50:43 OyfjnZjS
>>826
知らんがな。

828:login:Penguin
08/10/30 00:57:36 RkR37X0O
心配しているのは、debianがshをwww.debian-ports.orgで
サポートしはじめたとき、その時当てられるパッチが
非公式バイナリと互換がなくなって、日本はld.so、世界はlibc
というガラパゴス状態になってしまうことです。

組み込み機器にカスタマイズする場合は普通glibcなんて使わないから、
あんまり関係ないのでしょうけれども。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4537日前に更新/254 KB
担当:undef