Сделал .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 В чем может быть проблема?
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 и т.д. Это уже обсуждалось на форуме.
Как сделать, чтобы не надо было таскать с собой dll? Всмысле? Твоя программа эту длл не юзает? вот только программа запускается, если только .dll лежит рядом. ну так правильно, при такой линковке так и должно быть, винда ищет длл в твоей директории, в системной, по путям и если не находит, то выдает сообщение, мол нету такой длл и работать я не буду. не хочешь таскать с собой длл - линкуй статически.
О, спасибо, вроде сделал )) Чуток подправил ключ (добавил link). Может кому ещё пригодится получившийся батник (для vc++ 7.0): Код (Text): REM == для динамической библиотеки .DLL ключи: REM cl /Gz /LD /Ox cdll.cpp REM link /subsystem:windows /dll /def:cdll.def cdll.obj REM == для статической библиотеки .lib ключи: REM cl /c /Gz /LD /Ox cdll.cpp REM link /LIB cdll.obj /out:cdll.lib call vcvars32.bat cl /c /Gz /LD /Ox cdll.cpp link /LIB cdll.obj /out:cdll.lib pause Всё, без dll работает
yureckor Ерунду говоришь 1. Dll как таковой вообще нет, есть только .lib (1,07кб) и .obj (800 байт). 2. Ехе увеличился с 4,5 до 5 кБ. Или ты знаешь как сделать, чтобы прилинковав либу (т.е. увеличив кол-во выполняемого кода) уменьшить размер??? Барон Мюнхгаузен, не иначе )) P.S. Когда компилировалось не в .lib, а в .dll, размер dll был 40 кБ.
ml /c /coff file.asm Lib file.obj /out:file.lib на выходе нету file.lib. вопрос: в чем может быть дело?
Broken Sword Смею предположить, что сообщений об ошибке тоже нет. Причина такого поведения может быть в том, что масмовский Lib.exe выполняется асинхронно. Если его вызывать из батника, то такие команды как pause или del file.obj могут ему помешать. Также, возможно, из-за бага в самом Lib.exe статическая либа появилась в другом каталоге, но это менее вероятно. Я сейчас попробовал собрать file.lib с такими параметрами и у меня всё получилось. З.Ы.: Т.к. Lib.exe вызывает LINK.EXE, имеет смысл использовать LINK.EXE напрямую.