Russian Qt Forum
Ноябрь 22, 2024, 14:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как избавиться от импорта msvcrt.dll на MinGW?  (Прочитано 24563 раз)
Ленин
Гость
« : Декабрь 11, 2009, 10:31 »

После сборки простейшего проекта в MinGW получаю зависимый от msvcrt.dll исполняемый файл. Подскажите что делать, как избавиться от msvcrt.dll в зависимостях? Я пишу динамически загружаемый модуль для win32-совместимой ОС RTOS-32 (www.on-time.com). С тасканием dll в этой ОС некоторый гемор, так просто не загрузишь. Получается так, что для того, чтобы загрузить msvcrt.dll необходимо ещё загрузить виндовские kernel32.dll и ntdll.dll - не вариант.
Пример, есть стандартрая си-шная либа libmsvcrt.a (входит в состав MinGW) и я пытаюсь слинковать её статически со своей прогой:
Код:
/* hello.c */
#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("hello, world\n");
    return(0);
}
А вот командная строчка для сборки:
Код:
gcc.exe hello.c -static -lmsvcrt -o hello
В итоге получается файл hello.exe с зависимостью от msvcrt.dll. Как на MinGW можно сбилдить прогу без зависимости от msvcrt.dll ? После билда в VS с ключом /MT той же проги msvcrt.dll в зависимостях нет.
Подскажите в какую сторону копать.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Декабрь 11, 2009, 10:41 »

>>необходимо ещё загрузить виндовские kernel32.dll и ntdll.dll - не вариант.
я что-то не представляю себе виндовоз (или его клон) без этих dll'ок.
« Последнее редактирование: Декабрь 11, 2009, 10:44 от lit-uriy » Записан

Юра.
niXman
Гость
« Ответ #2 : Декабрь 11, 2009, 10:48 »

Цитировать
Как на MinGW можно сбилдить прогу без зависимости от msvcrt.dll ? После билда в VS с ключом /MT той же проги msvcrt.dll в зависимостях нет.
Вы предполагаете использовать программу без  вендавз? Ну и правильно. Такие "ос" не имеют права на существование Смеющийся
Записан
Ленин
Гость
« Ответ #3 : Декабрь 11, 2009, 10:51 »

Как бы ни было, это так. Ссылку на их сайт я привел, но вопрос не в этом... Как МинГВ указать, чтобы он libmsvcrt.a сбилдил статически.
Не следует понимать "win32-совместимая" так, как будто это значит, что есть все эти kernel32, ntdll и прочие виндовские dll.
« Последнее редактирование: Декабрь 11, 2009, 10:56 от Ленин » Записан
spectre71
Гость
« Ответ #4 : Декабрь 11, 2009, 10:57 »

Как бы ни было, это так. Ссылку на их сайт я привел, но вопрос не в этом... Как МинГВ указать, чтобы он libmsvcrt.a сбилдил статически.
Не следует понимать "win32-совместимая" так, как будто это значит, что есть все эти kernel32, ntdll и прочие виндовские dll.

Ты сам линкуешь libmsvcrt.a, вот и получаешь в зависимостях msvcrt.dll !
Записан
Ленин
Гость
« Ответ #5 : Декабрь 11, 2009, 10:58 »

И? Ну подскажите что делать-то Смеющийся в чем я не прав? на сколько я знаю, *.a это статические либы. Поправьте если что
« Последнее редактирование: Декабрь 11, 2009, 11:01 от Ленин » Записан
spectre71
Гость
« Ответ #6 : Декабрь 11, 2009, 11:03 »

И? Ну подскажите что делать-то Смеющийся в чем я не прав?

Это либа libmsvcrt.a, она не мажет линковаться не статически. Не путай с dll.
Она + хедер предназначены для простого подключения и использования функций msvcrt.dll.
Не линкуй libmsvcrt.a раз тебе не нужны ее (msvcrt.dll) функции.

libmsvcrt.a не статический вариант  msvcrt.dll - это интерфейс к msvcrt.dll
« Последнее редактирование: Декабрь 11, 2009, 11:06 от Spectre » Записан
Ленин
Гость
« Ответ #7 : Декабрь 11, 2009, 11:15 »

Так, теперь стало понятно. Функции из msvcrt нужны - там же все стандартные ansi c функции, такие как printf, memcpy и т.д. Вопрос значит в том, чтобы найти не интерфейсную либу...
Кстати, пробовал подсунуть MinGW либу из VS (libcmt.lib) - выкинуло с кучей ошибок
Записан
Tonal
Гость
« Ответ #8 : Декабрь 11, 2009, 11:53 »

msvcrt - это с рантайм для компиляторов MS. для разных компиляторов он разный:
6 - msvcrt, 7 - msvcr70, 7.1 - msvcr71 8.0 - msvcr80 и так далее.
Mingw не имеет своего рантайм а использует MS-овский.
По умолчанию msvcrt - как самый распространённый.

На сайте РТ-ОС есть страничка про поддерживаемые компиляторы: http://www.on-time.com/rtos-32-compatibility.htm
Там все версии MSVC перечислены.
Посмотри ещё http://www.on-time.com/rtos-32-docs/rttarget-32/programming-manual/running-win32-programs-without-win32/preparing-a-program-for.htm
Похоже это именно то, что тебе нужно. Улыбающийся
Записан
spectre71
Гость
« Ответ #9 : Декабрь 11, 2009, 11:55 »

Так, теперь стало понятно. Функции из msvcrt нужны - там же все стандартные ansi c функции, такие как printf, memcpy и т.д. Вопрос значит в том, чтобы найти не интерфейсную либу...
Кстати, пробовал подсунуть MinGW либу из VS (libcmt.lib) - выкинуло с кучей ошибок

Вопрос зачем? Ты что собираешь программу под одной системой для другой? Если они не совметимы, то это не правильно, а если совместимы, так и проблем не будет.
Записан
niXman
Гость
« Ответ #10 : Декабрь 11, 2009, 11:57 »

Так, теперь стало понятно. Функции из msvcrt нужны - там же все стандартные ansi c функции, такие как printf, memcpy и т.д. Вопрос значит в том, чтобы найти не интерфейсную либу...
Кстати, пробовал подсунуть MinGW либу из VS (libcmt.lib) - выкинуло с кучей ошибок

Вопрос зачем? Ты что собираешь программу под одной системой для другой? Если они не совметимы, то это не правильно, а если совместимы, так и проблем не будет.
Солидарен. Не существует вендов без этой длл-ки.
Записан
Ленин
Гость
« Ответ #11 : Декабрь 11, 2009, 12:15 »

msvcrt - это с рантайм для компиляторов MS. для разных компиляторов он разный:
6 - msvcrt, 7 - msvcr70, 7.1 - msvcr71 8.0 - msvcr80 и так далее.
Mingw не имеет своего рантайм а использует MS-овский.
По умолчанию msvcrt - как самый распространённый.
С этим согласен, а это все уже изучено вдоль и поперек Подмигивающий :
На сайте РТ-ОС есть страничка про поддерживаемые компиляторы: http://www.on-time.com/rtos-32-compatibility.htm
Там все версии MSVC перечислены.
Посмотри ещё http://www.on-time.com/rtos-32-docs/rttarget-32/programming-manual/running-win32-programs-without-win32/preparing-a-program-for.htm
Похоже это именно то, что тебе нужно. Улыбающийся

Вопрос зачем? Ты что собираешь программу под одной системой для другой? Если они не совметимы, то это не правильно, а если совместимы, так и проблем не будет.
Ну вот, опять! Похоже, что Вы не представляете что такое RTOS-32. Из под неё нельзя ничего собрать. Пишется прога (на VS или борланде - неважно), на этапе линковки к ней цепляются системные либы этой RTOS-32 и получается исполняемый файл, который запускается на x86
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Декабрь 11, 2009, 19:56 »

Ленин, есть такое соображение, возможно. что в студии в комплекте есть *.lib-файл, может можно попытатся его использовать, правда не знаю как. Но например в Qt, драйверы СУБД, когда компилируются то им нужен lib-файл (например, для FireBird используется именно МСовский). Т.е. теоретически можно их скрестить. Только как компилеру объяснить какой использовать это я не знаю.
Записан

Юра.
spectre71
Гость
« Ответ #13 : Декабрь 11, 2009, 21:38 »

Ленин, есть такое соображение, возможно. что в студии в комплекте есть *.lib-файл, может можно попытатся его использовать, правда не знаю как. Но например в Qt, драйверы СУБД, когда компилируются то им нужен lib-файл (например, для FireBird используется именно МСовский). Т.е. теоретически можно их скрестить. Только как компилеру объяснить какой использовать это я не знаю.

.lib-файлы и .a-файлы все это статические библиотеки. Просто ".lib" - стандартное виндозное расширение для них, в то время как ".a" - стандартное линуховое (в том числе и для mingw под винду).
Подкомпилить MSV либу под mingw/gcc не удастся(как правило).
« Последнее редактирование: Декабрь 11, 2009, 21:41 от Spectre » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Декабрь 11, 2009, 22:26 »

Qt'ишный драйвер для FireBird (fbclient_ms.lib) собирается без запинки с помощью MinGW32
Записан

Юра.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.