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

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

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Зачем для статического импорта в Си и масме для каждой длл нужен либ файл, если в других ЯП импорт берется и прописывается в исходнике, например в делфи Оо или фасме
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    попишешь пару лет солидные проджекты с нуля - поймешь!
     
  3. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    следуй догме
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    с нуля я буду писать без готовых .либ файлов
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Имхо пережиток тех древних времён когда статическая линковка lib была основным методом, а динамическая являлась новомодной экзотикой, от которого M$ упорно не желает отказываться.
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    ну вообще в lib вложены декорированные имена - с кол-вом параметров и конвенцией вызова, т.е. мало-мальский контроль правильности.
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Насчет больших проектов - есть Делфи, на ней тоже пишутся большие проекты, и в ней .lib файлов не предусмотрено. Догмой естественно тоже не предусмотрено.

    "декорированные имена - с кол-вом параметров и конвенцией вызова" - прописаны уже в экспорте длл, lib тут нипричем. Алсо контроль параметров осуществляется уже по прототипу функции в заголовочном файле.
     
  8. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    с нуля я тоже без них писал, потом решил создавать собстенные, дабы придерживаться своих изначальных правил, которые заложил в ТЗ. В некотором плане либы учень помогают и экономят время компиляции.
    в либы ложатся OBJ-файлы, объявления прописуют в *.h, хотя все это чисто условно, всегда можно придумать что то свое в плане объявлений и прописаний. Но *.lib это погреб для нескольких obj.
    то же самое могу и про асм сказать.... даже каркас на нем писан...да, возможно пережитки старого, но мне нравится гибкость.
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    .lib файлы нужны для статического импорта. В них прописываются структуры, которые формируют таблицу импорта в исполняемом. В результате получается так, что link'еру не нужно выполнять какой-то особой работы при создании исполняемого. Исполняемый содержит ф-ии типа __imp_function_name в качестве импорта, а .lib экспортирует эти же имена и содержит переходники. У Питрека, это все описано.
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    думаю это всем и так понятно, только зачем это все если проще без этого?
    Вот допустим у меня есть компилятор, и допустим есть линкер (отдельный вопрос зачем нужен линкер). Я хочу написать прогу которая делает много замечательных вещей, и как любая нормальная прога, она должна юзать апи, а по-нормальному апи юзается через статический импорт. И тут выясняется, что мне зачем-то нужен .либ файл. А откуда его взять? А оказывается надо юзать какуюто хитрую прогу длл2либ чтобы сгенерить этот .либ файл из длл. А если длл нет, а есть только имя функции? Может на этом компе я буду только компилить прогу, а запускать на другом? Хрень какая-то получатся...
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    linker -- полезная вещь при компиляции больших проектов. Например, ядро FreeBSD компилировалось на моем компьютере 30 минут (примерно). Ближе к концу компиляции произошла ошибка из-за некорректного файла конфигурации. В итоге, если бы не было .obj файлов, пришлось бы снова ждать 30 минут. А так, большая часть независимых .obj уже была скомпилирована и исходники, от которых они зависели, не изменились. В итоге "докомпиляция" заняла минут 10, или даже меньше. Вот тогда я оценил наличие .obj файлов :).
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    GoldFinch
    Вы считаете, что декларирование ф-ции как импортируемой из определённой DLL, лучше делать в исходниках?
    Минус такого подхода - негибкость. Например, мне нужно сделать свою реализацию части используемого WinAPI (хотя бы в виде переходников). Править хедеры SDK что ли?
    Для создания библиотеки импорта иметь саму DLL не обязательно - просто делаете def-файл с описанием нужных Вам ф-ций и генерируете lib-файл:
    Код (Text):
    1. lib.exe /def:DLL.def /out:DLL.lib
    Конечно, это немного сложнее чем в Delphi или VB. Но ведь по гибкости и универсальности эти языки не сравнить с C/C++.
     
  13. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Как правильно заметил Barbos
    В obj файла можно помещать код и переменные, а не только import/export. Но вообще без либ обойтись можно, но придется потратиться на время анализа исходных текстов. стандартные lib к MASM, TASM и C содержат import/export, но ни кто не мешает создать свои с кодом (допустим один раз написав алгоритм перевода int2str на MASM помещаем его в либ и используем или оставляем его в inc и тоже используем, кому как нравится).
     
  14. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    Вопрос начинающего :

    делаем свои функции ( т.е - объекты или как они там называются в С) :
    _______________________

    FUNC1 proc ...
    .....

    FUNC1 endp

    FUNC1PROC proc .... ; обработчик сообщений для объекта FUNC1
    ...

    FUNC1PROC endp
    _______________________________

    ну и ещё несколько FUNC2, FUNC3...

    Теперь, если в начале программы вставить

    FUNC1 proto :lol: WORD,:lol: WORD,.......

    то всё прекрасно работает - invoke FUNK1, ..... ( или можно просто call FUNC1)

    Загорелось сделать библиотеку из этих функций - MYFUNC.lib

    Ктонить может доступно обьяснить - как?

    спасибо, просьба в гугль не посылать
     
  15. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    driver
    lib /?
     
  16. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    lib /? - что это означает, уважаемый censored ?
     
  17. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    Компилишь исходный текст - получаешь obj. Полученный obj добавляешь в lib.
    Как?
    , где lib - соответствующая утилита.
     
  18. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    соответствующая утилита - можно подробней? и что "такое компилишь"?

    с какой стати компилятор выдаст объектный файл? надо шапку какую-то?
     
  19. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    driver, а вы каким компилятором пользуетесь?
    (.lib файлы используются в масм)
     
  20. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    я пользуюсь масмом - значит компилятор от мелкософта

    но, сори, никогда не интересовался процессом... просто нажимаю в менюшке у МасмБилдера - "компилить" и ...