ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

embedded LinuxコミュのuClibc

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ただいまuClibcを使ってソフトウェアをコンパイルしようとしているのですが、uClibcを

#>make menuconfig
#>make
#>make prefix="/usr/src/hoge" install

とインストールし使おうとしているのですが、どのように使用したら良いのか分からなく困っています。

本には export PATH=/usr/src/hoge/uclibc/bin:${PATH}
と環境変数をセットし
make CROSS_COMPAILE=i386-uclibc-
でコンパイルすると書いてあるのですが、環境変数の/usr/src/hoge/uclibc/binは存在しないパスです。

なにか分かりましたらよろしくお願いします。

コメント(9)

uClibcを作るためのバイナリユーティリティやら、
gccとかのcコンパイラはありますか??
ない場合は、作らなければいけませんよー。
1から作る場合は、カーネルのライブラリも必要だし・・・
コナンさん>

gcc等コンパイラ類は揃っています。
現在のところライブラリは作成されているのですが、コンパイルユーティリティが作成されていません。
0.9.28だとライブラリのみ作成可能でそれ以前のバージョンだとコンパイルエラーが出てしまいます。
にわかlinux使いなので、無知なところもあるのですが、
コンパイルユーティリティって具体的に何が作成されるのですか?
(って逆に質問してしまった^^;

話が前後してるのかもしれませんが、
PATHは、uClibc用にgccとかを作った場合はそこのディレクトリを指定。
CROSS_COMPAILEは、例えばuClibc用にi386-uclibc-gccやi386-uclibc-arなどを作った場合に、
CROSS_COMPAILE=i385-uclibc-
と設定なのですが。
設定しない場合はただのgccとかが使われたはず。

あと、アーキテクチャは何を想定してるのでしょう?
(i386でいいのですかね?

uClibcのインストールでややこしいことはないと思うので、
いろいろやれば、すぐ解決できるはずですので。
コナンさん>

コンパイルユーティリティと表したのはi386-uclibc-gccやi386-uclibc-aのことです。

バージョン0.9.28だとライブラリのみでそれ以前のバージョンだとコンパイルエラーが出るというのが気になります。
年を越してしまいましたが。
状況は、いかがでしょう?
そもそも、uClibcはライブラリしか作成出来ないのでは?^^;

クロス開発環境としてuClibcをインストールしたことがあるのですが、
その時にやった手順として
バイナリユーティリティ(ar・as・ldなど)のインストール

uClibcをインストールするためのgccのインストール

上でインストールしたものを使って、uClibcをインストール

uClibcを使ったgccのインストール

のような感じでやりました。参考になるでしょうか?

>バージョン0.9.28だとライブラリのみでそれ以前のバージョンだとコンパイルエラー

見てわかるかどうかは、わかりませんが、コンパイルエラーの内容を載せてくれると何かしら言えるかもしれません。
(エラーの内容が長いかもしれませんが^^;
ちょっと分からないのですが、ターゲットはなんでしょうか?
たとえば、
(1)Bering-uClibc(http://leaf.sourceforge.net/bering-uclibc/)のように、なんらかの目的で単にGlibcをuClibcで置き換えるだけなのか、
(2)それとも、ホスト環境(たぶんx86でしょうね?)と違うターゲット(ARMやH8)で動かすことを考えているのでしょうか?

(1)の場合はそんなに問題ないでしょう(元のGlibcを壊さないように!?)
(2)の場合は、クロス開発のためのコンパイラ(リンケージエディタ(ld)等も)が必要です。またこれをソースからBuildするには、セルフ開発(たぶんx86)用のコンパイラも必要です。

また(2) の場合は、使用するボードによって、同じCPUでもIO-Portのアドレスが違うのでmake時に指定する必要がありますが、大抵の市販のボードなら、make menuconfigで選択が可能だと思います。
このへんは、ターゲットボードのクロス開発のサイトが参考になるでしょう(ARMならatmarkit、H8なら佐藤さんのサイト---資料があちこちに分散しているので大変です。他は経験がありません)。

一度このへん(上のコナンさんの手順も参考にして)を整理して頂いて、どこで問題が発生しているかを明らかにしていただけないでしょうか?

気がついたこと
CROSS_COMPAILE=i386-uclibc-
のtypoが原因(CROSS_COMPAILE--> COMPILE)ということはないでしょうね? これを見るとセルフ開発?
それと
export PATH=/usr/src/hoge/uclibc/bin:${PATH}
の「hoge」は普通アーキテクチャ名(H8など)を入れるのですが、何にしているでしょうか?(名前はなんでも良いのですが、この名前に対応させて、環境変数などを変えるので、指定の名前にしておいた方が無難です。)
コナンさん>
状況はかわらずです・・・(^^;

uClibcですが、0.9.20ですとツールチェーンもコンパイルされることを確認しました。

log:
make -C libc/sysdeps/linux/i386 headers
make[1]: Entering directory
`/usr/src/build-tools/source/uClibc-0.9.20/libc/sysdeps/linux/i386'
make[1]: Nothing to be done for `headers'.
make[1]: Leaving directory
`/usr/src/build-tools/source/uClibc-0.9.20/libc/sysdeps/linux/i386'
make -C extra
make[1]: Entering directory
`/usr/src/build-tools/source/uClibc-0.9.20/extra'
make -C gcc-uClibc
make[2]: Entering directory
`/usr/src/build-tools/source/uClibc-0.9.20/extra/gcc-uClibc'
gcc -O2 -Wall -Wl,-s gcc-uClibc.c -o i386-uclibc-gcc
chmod a+x i386-uclibc-ld

エラーの内容ですが下記になります。

gcc -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
-mpreferred-stack-boundary=2 -falign-jumps=0 -falign-loops=0 -Os
-march=i486 -fno-builtin -nostdinc -D_LIBC -I../../include -I.
-I/usr/lib/gcc/i386-redhat-linux/4.1.1/include -DNDEBUG -fPIC
-DUCLIBC_TARGET_PREFIX=\"/\" -DUCLIBC_DEVEL_PREFIX=
\""/usr/i386-linux-uclibc"\" -DUCLIBC_BUILD_DIR=
\"/usr/src/build-tools/source/uClibc-0.9.20\" -I. -I./i386 -I../libdl -c
ldso.c -o ldso.o
ldso.c:132: error: static declaration of '_dl_not_lazy' follows
non-static declaration
ld_hash.h:125: error: previous declaration of '_dl_not_lazy' was here
ldso.c: In function '_dl_boot':
ldso.c:374: warning: pointer targets in assignment differ in signedness
ldso.c:376: warning: pointer targets in assignment differ in signedness
ldso.c:382: warning: pointer targets in assignment differ in signedness
ldso.c:608: warning: pointer targets in assignment differ in signedness
ldso.c:609: warning: pointer targets in assignment differ in signedness
make[2]: *** [ldso.o] Error 1
make[2]: Leaving directory
`/usr/src/build-tools/source/uClibc-0.9.20/ldso/ldso'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/src/build-tools/source/uClibc-0.9.20/ldso'
make: *** [_dir_ldso] エラー 2

nobuさん>
ターゲットはi386です。
早くi386を卒業してARMに移行したいです・・・(^^;

また、Linux環境が停電により起動しなくなってしまったので整理し、報告するのが遅れますのでよろしくお願いします(汗
uClibcのバージョン0.9.27で(インストールしたのがこのバージョンなので)
uClibc-0.9.27\ldso\ldso\ldso.c
の中身を確認したところ、"dl_not_lazy"が見つからなかったので、

ちょっと探してみたところ、

http://www.busybox.net/lists/uclibc-cvs/2003-August/003434.html

このページにいきつきまして、どうやらパッチがころがってそうですね^^
このエラーに関してはですが。


あと、nobuさんご指摘のtypoについて。
uClibcの0.9.27の場合になってしまいますが、
uClibc-0.9.27ディレクトリ直下にある、Rules.makファイルの
一部抜粋

#--------------------------------------------------------
# If you are running a cross compiler, you will want to set 'CROSS'
# to something more interesting... Target architecture is determined
# by asking the CC compiler what arch it compiles things for, so unless
# your compiler is broken, you should not need to specify TARGET_ARCH
#
# Most people will set this stuff on the command line, i.e.
# make CROSS=arm-linux-
# will build uClibc for 'arm'.

ifndef CROSS
CROSS=
endif
CC= $(CROSS)gcc
AR= $(CROSS)ar
LD= $(CROSS)ld
NM= $(CROSS)nm
STRIPTOOL= $(CROSS)strip

となっているので、バージョンによる変更なのかもしれませんが
確認しておいたほうがよろしいかと思います。
(自分も上でCROSS_COMPILE=と言ってますね。。。
正しくはCROSS=か・・・気づきませんでした。

それとですね、いまさらながら使用したいuClibcのバージョンや、
コンパイルするためのgccやらのバージョンを教えていただけませんかね?

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

embedded Linux 更新情報

embedded Linuxのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。