пропавшие без вести файла crti.o

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

24
задан Karl Richter 20 February 2017 в 07:32
поделиться

3 ответа

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 запутывается, и Вы хотите видеть, куда путь, который он открывает, прибыл из...

25
ответ дан Community 28 November 2019 в 23:55
поделиться

Хорошо я должен был переустановить набор инструментальных средств, так, чтобы недостающие файлы были тогда включены. Это кажется странным, так как это должно было найти его на пути gcc. Основная проблема, которую я предполагаю, состояла в том, что я имел приблизительно 15 различных crti.o файлов на своем компьютере и не был точкой к корректной. Все еще не делает, с тех пор, но это работает теперь:-) спасибо за Вашу справку:-)

1
ответ дан Richard 28 November 2019 в 23:55
поделиться

Я получаю тот же вид проблемы об установке Ubuntu 8.04 по умолчанию. Я должен был заставить libc заголовки/файлы разработчика вручную для него работать.

0
ответ дан leppie 28 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: