crti.o
es la biblioteca de bootstrap, generalmente bastante pequeña. Por lo general, está vinculado de forma estática con tu binario. Se debe encontrar en /usr/lib
.
Si está ejecutando una distribución binaria, tienden a poner todo el material de desarrollo en paquetes -dev (por ejemplo, libc6-dev) ya que no es necesario para ejecutar programas compilados, solo para compilarlos.
Usted no está compilando cruzado ¿verdad?
Si compila de forma cruzada, suele ser un problema que la ruta de búsqueda de gcc no coincida con su crti.o. Debería haberse construido cuando la cadena de herramientas estaba. Lo primero que debe verificar es gcc -print-search-dirs
y vea si crti.o está en alguna de esas rutas.
El enlace se realiza en realidad por ld pero tiene sus rutas pasadas a él por gcc. Probablemente la manera más rápida de descubrir qué está pasando es compilar un programa helloworld.c y buscarlo para ver qué pasa a ld y ver qué está pasando.
strace -v -o log -f -e trace=open,fork,execve gcc hello.c -o test
Abrir el archivo de registro y la búsqueda de crti.o, como se puede ver mi compilador no cruz:
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
Si ves un montón de intentos de open(...crti.o) = -1 ENOENT
, ld
se está confundiendo y desea ver de dónde vino el camino que está abriendo ...
para Mac , ver: http://stackoverflow.com/questions/1365211/error-in-xcode-project-ld-library-not-found-for-lcrt1-10-6-o/16102800 http://stackoverflow.com/ questio ns/10941247/command-line-library-build-failed-with-linker-error/16102769 – kenorb