hns - 日記自動生成システム - Version 2.19.9

先月 2005年09月 来月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2005年09月15日(木) 旧暦 [n年日記] [更新:"2005/09/16 22:12:23"]

#1 [gcc] gcc/as/ld に関する素朴な疑問

xy.c というプログラムがあったとします。
#include "stdio.h"
main (){
  int x, y;
  printf( "hello world!\n");
  x = 100;
  y = 200;
  printf( "x = %d, y = %d\n", x,y);
}
これをコンパイルして実行するのに一番簡単な方法は次のようにするでしょう。
ttyp1:makoto@mini 17:22:01/050915(~/c/debug)> cc -o xy xy.c
ttyp1:makoto@mini 17:22:33/050915(~/c/debug)> ./xy
hello world!
x = 100, y = 200
ところで、 ld を動くところを見たければ、
cc -c xy.c
とすると、xy.o が作れるので、これを使って
ld -o xy -L/usr/lib -lc /usr/lib/gcrt0.o xy.o
とするのかなと思うのですが、これでは実行出来ません。
./xy: Exec format error. Binary file not executable.
ttyp1:makoto@mini 17:39:50/050915(~/c/debug)> file xy
xy: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
さて、どうすれば実行出来るものが作れるのでせうか ?
ttyp1:makoto@mini 17:42:01/050915(~/c/debug)> ld -o xy -L/usr/lib -lc --oformat elf32-powerpc /usr/lib/gcrt0.o xy.o
ttyp1:makoto@mini 17:42:05/050915(~/c/debug)> ./xy
./xy: Exec format error. Binary file not executable.

中身を比べながら::

ld --oformat elf32-powerpc -o xy-manual xy.o -L/usr/lib -lc /usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtbegin.o /usr/lib/crtend.o /usr/lib/crtn.o
とすると、かなり近いものが出来るが、まだ少し違う。.interp というセクションで参照 している先が
× /usr/lib/ld.so.1     
○ /usr/libexec/ld.elf_so
という違いだけではないかという気がしている。man ld.elf_so すると.. どこかにある リンカースクリプトに、そう書いてある気がする

static 指定をすれば、これでも行ける:

ld -static --oformat elf32-powerpc -o xy-manual xy.o -L/usr/lib -lc /usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtbegin.o /usr/lib/crtend.o /usr/lib/crtn.o
ttyp9:makoto@mini 22:02:03/050916(~/c/debug)> ./xy-manual
hello world!
x = 100, y = 200

もう少し簡単に:

ttyp9:makoto@mini 22:04:00/050916(~/c/debug)> ld -static -o xy-manual xy.o -L/usr/lib -lc /usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtn.o
ttyp9:makoto@mini 22:04:25/050916(~/c/debug)> ./xy-manual
hello world!
x = 100, y = 200

assembler を間にはさむと:

226 22:10 cc -S -c xy.c
228 22:11 as -o xy.o xy.s
229 22:11 ld -static -o xy-manual xy.o -L/usr/lib -lc /usr/lib/crt0.o /usr/lib/crti.o /usr/lib/crtn.o
230 22:11 ./xy-manual

#2 [audio][USB] ELECOM USB-SAV51

2,980 円 (ヨドバシカメラ錦糸町) とちょっと高いが、100mA だけしか消費しないのでキーボードの先にでも つなぐことが出来て、とっても優秀といえる。これでマイクとへッドフォンが USB につ ながる。あっ、とても大切なこと:
  • 「Macintosh には対応していません」と書いてあるが、 少なくとも OS X 10.4.2 なら 何もドライバ等を入れることなく、そのまま使える
  • 説明には 5V 500mA とあるが、 アップルシステムプロファイルで見ると 100mA となっている。
  • 「(無給電) HUB につながないで PC の USB の口に直接つないで下さい」 と書いてあるが、どうもその必要がないと思われる
つまり G4 Cube のように音響入出力がなくて、しかも二つある USB の口が スピーカとキーボードで埋ってしまっている機械に マイクを増設するには最適だということになる。

NetBSD でも

audiorecord -f /dev/audio1 hoge
audioplay -f /dev/audio1 hoge
で録音再生が出来る (NetBSD/macppc 3.99.7 付近 tsubai 版)
Sep 15 19:59:26 mini /netbsd: ehci0: handing over full speed device on port 2 to ohci3
Sep 15 19:59:26 mini /netbsd: uhub3: port 2, device disappeared after reset
Sep 15 19:59:27 mini /netbsd: uaudio0 at uhub2 port 1 configuration 1 interface 0
Sep 15 19:59:27 mini /netbsd: : ABC C-Media USB Headphone Set, rev 1.10/1.00, addr 2
Sep 15 19:59:27 mini /netbsd: uaudio0: audio rev 1.00
Sep 15 19:59:27 mini /netbsd: audio1 at uaudio0: full duplex, independent
Sep 15 19:59:27 mini /netbsd: uhidev0 at uhub2 port 1 configuration 1 interface 3
Sep 15 19:59:27 mini /netbsd: 
Sep 15 19:59:27 mini /netbsd: uhidev0: ABC C-Media USB Headphone Set, rev 1.10/1.00, addr 2, iclass 3/0
Sep 15 19:59:27 mini /netbsd: uhid0 at uhidev0: input=4, output=4, feature=0



最近の日記
2024年03月10日
停電 (瞬電)
2024年03月03日
the second try on bare-metal
useradd
2024年02月29日
opendkim and senmail
2024年01月24日
chat/iam 0.0.8
2024年01月21日
uselocale vs setlocale (textproc/R-readxl)
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)