Linux: контроль того, где `ld` ищет объектные файлы .o?

Хорошо, вот такая ситуация: я пытаюсь использовать какое-то более старое программное обеспечение: отлично работает на 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");
...

Дело в том, что:

  • На Lucid, crt1.o находится в /usr/lib/crt1.o
  • On Натти, 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  /lib/crt0.o hello.o -lc

  This tells ld to produce a file called output as the result of linking
  the file "/lib/crt0.o" with "hello.o" and the library "libc.a", which
  will come from the standard search directories. 
...

-L searchdir
--library-path=searchdir
  Add path searchdir to the list of paths that ld will search for
  archive libraries and ld control scripts.

... то есть « -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»

6
задан Community 23 May 2017 в 11:54
поделиться