__gcc_personality_v0

このようなコードの

#include <stdio.h>
int main()
{
  printf("Nikkei Linux\n");
  return 0;
}


オブジェクトファイルを静的リンクしようとしたら

bird:# ld /usr/lib/crt1.o /usr/lib/crti.o hello.o /usr/lib/libc.a `gcc -print-libgcc-file-name` /usr/lib/crtn.o; echo $?
/usr/lib/libc.a(ioputs.o): In function `puts':
(.text+0x146): undefined reference to `_Unwind_Resume'
/usr/lib/libc.a(ioputs.o):(.eh_frame+0xde): undefined reference to `__gcc_personality_v0'

エラーになるので


__gcc_personality_v0を探すと・・

bird:# sudo find /lib /usr/lib -name "*.so" | xargs nm -D -A | grep __gcc_personality_v0
Password:
/lib/libdevmapper-event.so:         U __gcc_personality_v0
nm: /usr/lib/libpthread.so: ファイル形式が認識できません
nm: /usr/lib/libc.so: ファイル形式が認識できません
/usr/lib/gcc/i386-redhat-linux/4.1.1/libgcj.so:         U __gcc_personality_v0
/usr/lib/gcc/i386-redhat-linux/4.1.1/libgcc_s.so:00336c70 T __gcc_personality_v0
/usr/lib/libmono.so:         U __gcc_personality_v0
/usr/lib/librpmio-4.4.so:         U __gcc_personality_v0

あった


もっかいリンク

bird:# ld /usr/lib/crt1.o /usr/lib/crti.o hello.o /usr/lib/libc.a `gcc -print-libgcc-file-name` /usr/lib/crtn.o /usr/lib/gcc/i386-redhat-linux/4.1.1/libgcc_s.so; echo $?
0

成功


でも、動的リンクになってる・・

bird:# file hello
hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
bird:# ./hello
zsh: そのようなファイルやディレクトリはありません: ./hello

しかもファイルが認識されてない・・なんで?