Цитата(Николай КОКОРИН @ Dec 10 2009, 13:50)

Извините, если запостил не в тот раздел. Только тут упоминание про GNU.
После сборки простейшего проекта в MinGW получаю зависимый от msvcrt.dll исполняемый файл. Подскажите что делать, как избавиться от msvcrt.dll в зависимостях? Операционка 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. Вот список требующихся функций:
Код
__getmainargs
__p__environ
__p__fmode
__set_app_type
_cexit
_fmode
_fpresent
_iob
_onexit
_setmode
atexit
puts
signal
Как на MinGW можно сбилдить прогу без зависимости от msvcrt.dll ? После билда в VS с ключом /MT той же проги msvcrt.dll в зависимостях нет.
Подскажите в какую сторону копать.
ЗЫ: приложил файлики
в винде полностью статическая программа возможна? а нах ей тогда ОС?
я сомневаюсь что это както просто можно сделать. дело втом что либы в данном случае есть только либы импорта(сцылаются на то что в dll). Чтоб статически собрать, нужна юиблиотека с кодом. но микрософт такого не дает - код то проприетарный.
единственный способ - написать свою либу которая будет реализовывать функции указанные в списке и прилинковать ее вместо -lmsvcrt.
я так думаю что тут не MinGW а сама OC дает такую ситуацию. Например мы видим puts - это вытягивается printf'ом . но это работа с "символьным девайсом" и реализована могет быть только в ядре ОС, соответственно без dll'ок никак.
другое дело что у вас какойто RTOS-32, че это за хрень я не знаю, если оно позволяет процессу работать на прямую с устройствами (или что более вероятно ядро сразу для всех процессов экспортирует в его адресное пространство все API) то наверно без подгружаймых мрдулей можно обойтись.
чето както так.