Re: Вопрос по GNU ld:
А что мешает переименовать символ в программе?
void f __attribute__ weak;
Нет, не понял. Как это - "в случае ошибки считает верным" ? В случае ошибки он ругается и выходит.
Или ручками поставь weak в X.
одна, а их потенциальная бесконечность.
Задача в том, что с имеющимся объектником нужно уметь компилировать всякие
разные C-исходники, при этом задавая вручную, откуда линкер будет брать
определения повторяющихся символов, буде таковые появляются: из
скомпилированного C-кода или же из объектника.
(Без объектника любой C-код, имеющий отношение к описываемой задаче, не должен
скомпилиться, так как объектник предоставляет некие ресурсы).
Может символы, которые могут повторяться вынести в отдельный объектник? И его не линковать, а подгружать динамически?
автоматически, линкером, наверное.
2. Исходного кода объектника X просто нет.
(Рамки ситуации довольно узкие, потому и спрошиваю у вас).
Делать замены в исходниках с помощью sed, что бы не было совпадающих символов?
разных программ, с которыми линкуется X. Поэтому sed до линковки не знает, какие
именно объекты переименовывать.
Разве что использовать список ошибок линковки, чтобы sed'ом, исходя из этого
списка, переименовать объекты и ещё раз скомпилировать программу. Но это стрёмно
как-то.
2. Кстати, динамическая библиотека не покатит: целевая платформа - msp430.
С помощью утилиты, имени которой я не знаю (но она есть ) сделать часть символов weak или вообще удалить/переименовать.
--allow-multiple-definition
-z muldefs
Normally when a symbol is defined multiple times, the linker will
report a fatal error. These options allow multiple definitions and
the first definition will be used.
Оставить комментарий
Defolt1
Есть программа на C и есть объектник X, с которым она компилируется. Есть ошибкаld про multiple definition, причём в случае дублирования линкер считает верным
определение символа из X, а не из скомпилированной программы.
Требуется подавить ошибки multiple definition, заставив ld считать верным
определение символа из программы, а не из X.