__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
しかもファイルが認識されてない・・なんで?