crti.o
はブートストラップ ライブラリで、通常は非常に小さいです。通常、バイナリに静的にリンクされています。にあります/usr/lib
。
バイナリ ディストリビューションを実行している場合、コンパイルされたプログラムを実行する必要はなく、単にビルドするだけなので、すべての開発者用のものを -dev パッケージ (例: libc6-dev) に入れる傾向があります。
あなたはクロスコンパイルしていませんか?
クロスコンパイルしている場合、通常は gcc の検索パスが crti.o の場所と一致しないという問題があります。ツールチェーンがあったときに構築されているはずです。最初に確認することはgcc -print-search-dirs
、crti.o がこれらのパスのいずれかにあるかどうかを確認することです。
リンクは実際にはldによって行われますが、そのパスはgccによって渡されます。おそらく、何が起こっているのかを知る最も簡単な方法は、helloworld.c プログラムをコンパイルし、それを strace して ld に何が渡されているかを確認し、何が起こっているかを確認することです。
strace -v -o log -f -e trace=open,fork,execve gcc hello.c -o test
ログ ファイルを開いて crti.o を検索すると、私の非クロス コンパイラが表示されます。
10616 execve("/usr/bin/ld", ["/usr/bin/ld", "--eh-frame-hdr", "-m", "elf_x86_64", "--hash-style=both", "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", "-o"
, "test", "/usr/lib/gcc/x86_64-linux-gnu/4."..., "/usr/lib/gcc/x86_64-linux-gnu/4."..., "/usr/lib/gcc/x86_64-linux-gnu/4."..., "-L/usr/lib/gcc/x86_64-linux-g
nu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/usr/lib/gcc/x86_64-linux-gnu/"..., "-L/lib/../lib", "-L/usr/lib/../lib", "-L/usr/lib/gcc/x86_64-linux-gnu
/"..., "/tmp/cc4rFJWD.o", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "-lc", "-lgcc", "--as-needed", "-lgcc_s", "--no-as-needed", "/usr/lib/gcc/x86_
64-linux-gnu/4."..., "/usr/lib/gcc/x86_64-linux-gnu/4."...], "COLLECT_GCC=gcc", "COLLECT_GCC_OPTIONS=\'-o\' \'test\' "..., "COMPILER_PATH=/usr/lib/gcc/x86_6"..., "LIBRARY_PATH=/usr/lib/gcc/x86_64"..., "CO
LLECT_NO_DEMANGLE="]) = 0
10616 open("/etc/ld.so.cache", O_RDONLY) = 3
10616 open("/usr/lib/libbfd-2.18.0.20080103.so", O_RDONLY) = 3
10616 open("/lib/libc.so.6", O_RDONLY) = 3
10616 open("test", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
10616 open("/usr/lib/gcc/x86_64-linux-gnu/4.2.3/../../../../lib/crt1.o", O_RDONLY) = 4
10616 open("/usr/lib/gcc/x86_64-linux-gnu/4.2.3/../../../../lib/crti.o", O_RDONLY) = 5
10616 open("/usr/lib/gcc/x86_64-linux-gnu/4.2.3/crtbegin.o", O_RDONLY) = 6
10616 open("/tmp/cc4rFJWD.o", O_RDONLY) = 7
への一連の試行が混乱しopen(...crti.o) = -1 ENOENT
てld
いるのを見て、開いているパスがどこから来たのかを確認したい場合...