lib и dll

Тема в разделе "WASM.ZEN", создана пользователем cresta, 4 апр 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Сделал .dll, и попутно получил .lib.

    Прилинковал .lib к ехе, все нормально, без предупреждений и ошибок, вот только программа запускается, если только .dll лежит рядом. Как сделать, чтобы не надо было таскать с собой dll? Пробовал сделать dll без DllMain - тот же эффект.



    Dll и lib делал так:



    cl /Gz /LD /Ox cdll.cpp

    link /subsystem:windows /dll /def:cdll.def cdll.obj



    Ехе с такими ключами/опциями:



    cl /Ox dbg.cpp

    link dbg.obj dbg.res /subsystem:windows



    В чем может быть проблема?
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta

    Надо компилировать статическую либу!

    cl /Gz /LD /Ox cdll.cpp

    lib cdll.obj /out:cdll.lib



    Сделал .dll, и попутно получил .lib

    Этот lib содержит экспортируемые DLL символы для статической линковки DLL, но не LIB! Т.е. LIB не более чем таблица с переходниками на DLL, вроде kernel32.lib, user32.lib и т.д. Это уже обсуждалось на форуме.
     
  3. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
    Как сделать, чтобы не надо было таскать с собой dll?

    Всмысле? Твоя программа эту длл не юзает?

    вот только программа запускается, если только .dll лежит рядом.

    ну так правильно, при такой линковке так и должно быть, винда ищет длл в твоей директории, в системной, по путям и если не находит, то выдает сообщение, мол нету такой длл и работать я не буду.



    не хочешь таскать с собой длл - линкуй статически.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    О, спасибо, вроде сделал :)))

    Чуток подправил ключ (добавил link). Может кому ещё пригодится получившийся батник (для vc++ 7.0):


    Код (Text):
    1. REM == для динамической библиотеки .DLL ключи:
    2. REM    cl /Gz /LD /Ox cdll.cpp
    3. REM    link /subsystem:windows /dll /def:cdll.def cdll.obj
    4.  
    5. REM == для статической библиотеки .lib ключи:
    6. REM    cl /c /Gz /LD /Ox cdll.cpp
    7. REM    link /LIB cdll.obj /out:cdll.lib
    8.  
    9. call vcvars32.bat
    10.  
    11. cl /c /Gz /LD /Ox cdll.cpp
    12. link /LIB cdll.obj /out:cdll.lib
    13.  
    14. pause




    Всё, без dll работает :)
     
  5. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    >Всё, без dll работает

    Только размер файла увеличился на размер dll :)
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    yureckor



    Ерунду говоришь :)

    1. Dll как таковой вообще нет, есть только .lib (1,07кб) и .obj (800 байт).

    2. Ехе увеличился с 4,5 до 5 кБ.





    Или ты знаешь как сделать, чтобы прилинковав либу (т.е. увеличив кол-во выполняемого кода) уменьшить размер???

    Барон Мюнхгаузен, не иначе :)))



    P.S.

    Когда компилировалось не в .lib, а в .dll, размер dll был 40 кБ.
     
  7. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    ml /c /coff file.asm

    Lib file.obj /out:file.lib



    на выходе нету file.lib.

    вопрос: в чем может быть дело?
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Broken Sword



    Смею предположить, что сообщений об ошибке тоже нет.



    Причина такого поведения может быть в том, что масмовский Lib.exe выполняется асинхронно. Если его вызывать из батника, то такие команды как pause или del file.obj могут ему помешать. Также, возможно, из-за бага в самом Lib.exe статическая либа появилась в другом каталоге, но это менее вероятно.



    Я сейчас попробовал собрать file.lib с такими параметрами и у меня всё получилось.



    З.Ы.: Т.к. Lib.exe вызывает LINK.EXE, имеет смысл использовать LINK.EXE напрямую.