LINUX.ORG.RU

Слинковать ldscript со статической библиотекой

 , ,


0

1

Собственно, какие переменные в Makefile.am отвечают за это? LDFLAGS не проходит, а LFLAGS не заметно в выхлопе make. Как такие вещи вообще делаются? Библиотеку собираю для bare metal устройству.

Ответ на: комментарий от LongLiveUbuntu

А что вообще значит фраза «Слинковать ldscript со статической библиотекой»? Вопрос в том, как опцию -T задать, или что?

xaizek ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

В какую переменную automake её писать в случае статической библиотеки?

А толку? Что её будет обрабатывать вообще? ar не умеет. Статическая библиотека это же просто архив объектных файлов. А ldscript используется для размещения символов в конечном ELF файле. Мне кажется это надо передавать конечному приложению.

xaizek ★★★★★
()

Да, xaizek прав, линкер скрипт используется только линкером при сборке исполняемого файла или шаред либы. При сборке статической либы линкер не вызывается и соотвественно ldscript не используется.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

Ну и как быть, чтобы разрешить extern переменные, которые объявляются в одном из файлов библиотеки и определяются в файле ldscript'a?

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Наличие неразрешенных extern переменных не может никак помешать собрать статическую библиотеку. Проведем эксперимент:
1) Создаем файл foo.c

extern void bar(int val);
extern int GLOBAL_VALUE;

void foo(int arg) {
  GLOBAL_VALUE = arg;
  bar(arg);
}
2) Компилируем его:
gcc -O3 -c foo.c
3) Создаем статическую библиотеку:
ar rc libfoo.a foo.o
Все, готово, получили статическую библиотеку libfoo.a, никаких ошибок. А кто захочет собрать исполняемый файл используя эту библиотеку, тот и должен потрудится и подложить нужные символы и ldscript.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

То есть все разрешается на этапе итоговой компиляции прошивки. Спасибо.

LongLiveUbuntu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.