Хорошо, вот такая ситуация: я пытаюсь использовать какое-то более старое программное обеспечение: отлично работает на Ubuntu Lucid, не работает на Natty.
Итак, я strace
немного поглядел, и оказалось, что это программное обеспечение вызывает ld
, и ld
в конечном итоге терпит неудачу с:
.../ld: crt1.o: No such file: No such file or directory
. .. да, старый файл crti.o отсутствует ошибка :) Однако я хотел бы задать вопрос в более общих чертах ...
Дело в том, что это «автономный» ( старше) ld
здесь, и когда я запускаю ... / ld -verbose | less
, я получаю:
...
SEARCH_DIR("/usr/local/lib");
SEARCH_DIR("/lib");
SEARCH_DIR("/usr/lib");
...
Дело в том, что:
crt1.o
находится в /usr/lib/crt1.o
crt1.o
находится в /usr/lib/i386-linux-gnu/crt1.o
... поэтому неудивительно, почему crt1. o
не может быть найден, я думаю. Кажется, все, что мне нужно сделать, это сказать ld
, чтобы он искал crt1.o
в / usr / lib / i386-linux-gnu
, но как мне это делать?
Я думал, что могу использовать опцию -L
, но человек ld
говорит:
to link a file "hello.o":
ld -o
... то есть « -L
» повлияет на где мы ищем " libc.a
" (в примере man) - но не объектные файлы.
Я бы предпочел для этого переменную окружения, но я пробовал как LD_PRELOAD_PATH
, так и LD_LIBRARY_PATH
, но безрезультатно (я думаю, они связаны с «общими объектами», а эти Файлы .o
к их числу не относятся).
Кто-нибудь знает, есть ли переменная среды (желательно - а если нет, параметр командной строки для ld
), который будет определять, где ld
ищет объектные файлы .o
?
В качестве примечания, я бы мог просто указать символическую ссылку /usr/lib/i386-linux-gnu/crt1.o
в / usr / lib /
, но я бы лучше используйте переменную среды, если она существует ... Если нет, есть ли другие возможные решения этой проблемы?
Заранее благодарим за любые ответы,
Ура!
РЕДАКТИРОВАТЬ: возможно, актуально: Дэниел Кегель - проблемы новичка - с-sysroot: «ld: не удается открыть crt1.o»