Зачем нужны .lib файлы?

Тема в разделе "WASM.BEGINNERS", создана пользователем GoldFinch, 21 сен 2008.

  1. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    driver, ты прикалуешься?%)
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Компиляция — процесс преобразования текcта программы написанного на языке высокого уровня в машинный язык (здесь под понятие языка высокого уровня и ассемблер попадает). Программы, осуществляющие преобразование — компиляторы.
    В русскоязычной литературе еще можно встретить термин "трансляция", синоним "компиляции". Результат компиляции объектные файлы (*.obj).


    Линковка, она же компоновка, этап следующий за компиляцией.
    Компоновщик (также реда́ктор свя́зей, англ. linker, link editor) — программа, которая производит компоновку — принимает на вход один или несколько объектных модулей и собирает по ним исполняемый модуль.

    Для связывания модулей, компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:

    Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям
    Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя
    Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.

    источник - ru.wikipedia.org

    В MASMе компиляцию творит утилита masm.exe (masm32.exe). Линковкой занимается link.exe.
    ml.exe - утилита, которая объединяет эти два процесса.
     
  3. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Как вариант. Пишешь несколько ф-ций, сохраняешь их в одном asm-файле. Компилируешь - получаешь obj-файл. Создаешь еще один файл, в котором прописываешь прототипы, сохраняешь, например, с расширением ".h". В другом аsm-файле, из которого ты собираешься дергать эти функции, прописываешь строчку "include <имя файла.h>. obj можно закинуть в *.lib с помощью утилиты lib.exe. Кстати, такая утилита есть не только в MASMе. В OpenWatcom есть тоже. Теперь, чтобы линкер нашел твою библиотеку, указываешь ее (путь к ней) в командной строке. Как? - можно спросить у самого линкера, либо глянуть в доках к пакету.

    И еще, при таких извращениях советую обращать внимание на модель памяти, имена сегментов и конвенции вызовов. Если все делать правильно, то можно писать один проект на разных языках, в разных средах и т.д.
     
  4. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    Привет Barbos, пасиба за разъяснения, однако хотелось бы с прискорбием сообщить, что в папке bin masm'a10 нет masm.exe и утилиты lib.exe
    Есть 8 и 9 масмы, ктонить помнит там есть? и можно ли распаковать их не устанавливая? ... (наверное можно - на другой диск)

    Хорошая статья - "Как сделать инвокабельную библиотеку"... попробовать сделать dll и потом из неё lib?

    проблема - возникает идея, появляется функция, она отлаживается, всё ок, потом - валяется где-то, её искать надо... а хорошо бы - попроще как-нибудь добавлять новую функцию в библиотеку и прикручивать к коду, в случае необходимости..
     
  5. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    lib.exe нашёл, masm.exe йок
     
  6. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Интересный момент. lib.exe могет как собирать, так и разбирать либы.
    а в пакете OpenWatcom есть утилита wdis.exe, с ее помощью можно декомпилить объектные файлы. Полезная штука. Правда под виндой я OpenWatcom не юзал, но в DOSовской версии точно есть.
     
  7. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    OpenWatcom работает под виндой - последняя версия 1.7a ( 62 метра )
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    GoldFinch
    Проще руками его набрать? Или как ты этот процесс cебе представляешь?
     
  9. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Есть (в фасме) макросы которые делают импорт, надо только перечислить имена функций.
    Если макроса под рукой нет, то ченить типа
    Код (Text):
    1. data import
    2. dd 0,0,0,rva aUSER32, rva MessageBoxA, 0,0,0,0,0
    3. end data
    4. MessageBoxA dd rva aMessageBoxA,0
    5. aUSER32 db "USER32.DLL",0
    6. aMessageBoxA db 0,0,"MessageBoxA",0
    набрать недолго, да и сам макрос занимает строчек 8
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    GoldFinch
    Хз. если проект большой, то мне было-бы в падлу. А так либу подключил и никаких забот.
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    он работает под вынь16, вынь32, дос, линь, кнх4, альфа, ппс, и еще куча всего. В сорцовый пакет входит много не входящего в стандартный бинарный.
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    driver
    IMHO Barbos не прав -- в masm.8-masm.10 компилятор ml, который при отсутствии ключа /c подключает компоновщик link.exe, если указан ключ /Bl<linker> будет использован какой-либо другой компоновщик. Компилятор masm.exe я нашел в MASM.610
     
  13. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    ну дык значит такой все-таки есть:)
     
  14. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    вопрос так и не решён - возможно ли сделать утилиту, которая будет делать библиотеку из асм файлов, в которых прописаны функции - просто открываешь файл - нажимаешь кнопку - создать там библиотеку или добавить туда эту функцию,..... уверен что возможно... надо репу чесать...
     
  15. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    приделай гуй к lib.exe ...
     
  16. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    driver
    Редактировать *.lib можно на уровне obj-файлов, которые в ней содержаться, т.е. добавить/доставть/удалить. Чтобы редактировать на уровне функций, тебе соответственно понадобятся исходные тексты данного obj-файла. Редактируешь исходник, компилишь новый *.obj, заменяешь в *.lib старый *.obj на новый. А что бы было
    то это достигается путем автоматизации процесса:)