パスワードを忘れた? アカウント作成
567847 journal

witchの日記: (ROBO)(メモ) X-52 ライブラリの静的リンク 3

日記 by witch

「あなたそんなことも知らないの?」って知らなかったのか忘れたのかすら判らないですが…

レッツバーニング!BBSの1216のスレッド」を見ていて「?」と思って Google してみた。

「C ライブラリ リンク」で出てくる一番最初のが
コンピューター:C言語講座:共有ライブラリについて
(小俣光之:コンピューターのページ(C言語講座))

ふむふむ。

で、試してみた。

%cat t.c
#include <stdio.h>
#include <math.h>
int main(int argc,char** argv){
        if ( argc < 2 ) { exit(-1); }
        printf("sin(%d): %f\n",atol(argv[1]),sin(atol(argv[1])*M_PI/180L));
}

%cc t.c -lm -o t1

%cc t.c /usr/lib/libm.a -o t2

%ldd t1
        libm.so.6 => /lib/libm.so.6 (0x40020000)
        libc.so.6 => /lib/libc.so.6 (0x40042000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

%ldd t2
        libc.so.6 => /lib/libc.so.6 (0x40020000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

ふむふむ。

でも…「どの関数がどのライブラリにあるか」ってどうやって調べるの?覚えるもの?
(どのヘッダで宣言されているかは man を見れば判るんですが…)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by tt (2867) on 2005年06月15日 0時53分 (#751391) 日記
    普通link時に設定すべきオプションとか、どういうライブラリに属する関数なのかまで記述していると思います。たとえばSolarisのmanだと
    cc [ flag ... ] file ... -lm [ library ... ]
    #include <math.h>

    double sin(double x);
    などとあります。しかし、まともでない環境:pであるLinuxとかBSDとかだと、ちゃんと書いてないことのほうが多いですね…

    そして、全然まともでない環境ばかりの組み込みの世界とかだとnmとかのお世話になりっぱなしに。nm -n *.a|less とか…

    --
    -- Takehiro TOMINAGA // may the source be with you!
    • by Anonymous Coward
      解a)体に覚えこませる。
      よくあるけれど、移行が難しい。
      解b)ライブラリを自分で書く。
      めったにないが、廃人になれる。
      解c)そのほかの方法を探す。
      できればこう行きたい。
  • nm使えばなんとか...
typodupeerror

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

読み込み中...