Подгружаемая библиотека...

Тема в разделе "WASM.UNIX", создана пользователем r90, 13 ноя 2011.

  1. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Есть некий .elf файл (интерпретатор языка), хочется написать .so библиотечку и подгрузить из .elf через dlopen. Но фишка в том, что этот .so должен иметь доступ к глобальным переменным из .elf. И очень бы хотелось (мечты... мечты...) чтобы для использования переменной из .elf, мне было бы достаточно пометить в сорцах подгружаемой библиотеки эту переменную словом extern при объявлении, пошаманить немного с линковкой при сборке .so, а потом забыть про эти глобалы вообще.

    Собственно ситуация такова, что передо мною стоит выбор: либо оформить код в виде so и подгрузить, либо пересобирать весь интерпретатор докинув туда своего кода. Пересобирать возможно, и именно этим я и планирую заняться; но чисто организационно удобнее было бы пользоваться системной версией интерпретатора, подгружая то что надо тогда, когда надо.

    ps. В гугл не ходил, манов не читал. Не потому, что не умею, и не потому что, надеюсь на то, что вы за меня сходите и почитаете. Дело в другом: я сомневаюсь в возможности такого трюка, и подозреваю, что для того чтобы убедиться в этом, можно целый день ходить и читать. Искренне надеюсь на конструктивные "пошёл на..." со ссылками.
     
  2. bsnake

    bsnake New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    91
    Вынесите глобальные переменные в отдельную so, после слинкуйте интерпритатор и вашу библиотеку с so'шником в котором находятся все глобальные переменные.
     
  3. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    както плохо представляю как сделать чтото extern в уже скомпилированном коде без перекомпиляции.
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    bsnake
    Мне хочется иметь системную версию интерпретатора. То есть оригинальную и неизменённую. Без наложения патчей, перекомпиляции и пр. А если надо будет перекомпилировать, то вся проблема теряет актуальность, поскольку заодно можно всадить в elf вообще всё что надо.
    qqwe
    Это ведь вы отвечали на комментарий bsnake, так?
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    r90
    Если я правильно перевел, то , если использовать ключ -rdynamic при сборке elf, все его глобальные метки будут участвовать в связывании при выполнении dlopen
     
  6. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    valterg
    Точно! -rdynamic, согласно info gcc добавляет флаг ld --export-dynamic при линковке, про который в man ld написано, в частности, следующее:
    Спасибо!
     
  7. lplon

    lplon New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2012
    Сообщения:
    1
    СПС. Очень помогло.