Есть некий .elf файл (интерпретатор языка), хочется написать .so библиотечку и подгрузить из .elf через dlopen. Но фишка в том, что этот .so должен иметь доступ к глобальным переменным из .elf. И очень бы хотелось (мечты... мечты...) чтобы для использования переменной из .elf, мне было бы достаточно пометить в сорцах подгружаемой библиотеки эту переменную словом extern при объявлении, пошаманить немного с линковкой при сборке .so, а потом забыть про эти глобалы вообще. Собственно ситуация такова, что передо мною стоит выбор: либо оформить код в виде so и подгрузить, либо пересобирать весь интерпретатор докинув туда своего кода. Пересобирать возможно, и именно этим я и планирую заняться; но чисто организационно удобнее было бы пользоваться системной версией интерпретатора, подгружая то что надо тогда, когда надо. ps. В гугл не ходил, манов не читал. Не потому, что не умею, и не потому что, надеюсь на то, что вы за меня сходите и почитаете. Дело в другом: я сомневаюсь в возможности такого трюка, и подозреваю, что для того чтобы убедиться в этом, можно целый день ходить и читать. Искренне надеюсь на конструктивные "пошёл на..." со ссылками.
Вынесите глобальные переменные в отдельную so, после слинкуйте интерпритатор и вашу библиотеку с so'шником в котором находятся все глобальные переменные.
bsnake Мне хочется иметь системную версию интерпретатора. То есть оригинальную и неизменённую. Без наложения патчей, перекомпиляции и пр. А если надо будет перекомпилировать, то вся проблема теряет актуальность, поскольку заодно можно всадить в elf вообще всё что надо. qqwe Это ведь вы отвечали на комментарий bsnake, так?
r90 Если я правильно перевел, то , если использовать ключ -rdynamic при сборке elf, все его глобальные метки будут участвовать в связывании при выполнении dlopen
valterg Точно! -rdynamic, согласно info gcc добавляет флаг ld --export-dynamic при линковке, про который в man ld написано, в частности, следующее: Спасибо!