Возможно ли
Нет.
для других перемещаемых объектов (объектный файл или библиотека stati c)
Эта часть вопроса не имеет смысла: ссылка .o
файл против .symtab
для получения что ?
Если вы имеете в виду, добавьте дополнительный foo.o
в существующий исполняемый файл, ответ нет: ELF
компоновщики считают исполняемый файл final . Большая часть информации, необходимой для перестроения исполняемого файла, отбрасывается после ссылки, и без этой информации разбить исполняемый файл на части и перестроить его заново с добавлением нового кода практически невозможно.
Существует один компоновщик (в AIX) который позволяет разбить и перестроить такой раздел, но он не использует формат ELF
.
или разделяемый lib
No: динамик c компоновщик не может использовать .symtab
. Это символ, который нужно экспортировать в таблицу символов Dynami c.
Вы можете построить свой исполняемый файл с флагом -Wl,--export-dynamic
, и тогда функция будет присутствовать в .dynsym
и может использоваться другими общими библиотеками.
или исполняемым файлом для использования / ссылки на / для доступа к символу теста в таблице .symtab?
Что бы означало иметь один исполняемый файл ссылка на другой исполняемый файл? Они не могут быть запущены в одном и том же процессе (если только один из них не является позиционно-независимым исполняемым файлом, который на самом деле представляет собой специальную форму совместно используемой библиотеки).
Обновление:
clang-10 shared.c main -fPIC -shared -o libShared.so
Как я уже говорил, вы не ссылаетесь на исполняемый файл main
.
Команда Вы ищете:
clang-10 shared.c -fPIC -shared -o libShared.so
Это работает, потому что разделяемым библиотекам (по умолчанию) разрешено иметь неразрешенные символы.