Николай КОКОРИН 0 10 декабря, 2009 Опубликовано 10 декабря, 2009 (изменено) · Жалоба Извините, если запостил не в тот раздел. Только тут упоминание про 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 в зависимостях нет. Подскажите в какую сторону копать. ЗЫ: приложил файлики Hello.zip Изменено 10 декабря, 2009 пользователем Николай КОКОРИН Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 10 декабря, 2009 Опубликовано 10 декабря, 2009 · Жалоба Извините, если запостил не в тот раздел. Только тут упоминание про 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) то наверно без подгружаймых мрдулей можно обойтись. чето както так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Николай КОКОРИН 0 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба Я выше писал, что на VS получается сбилдить прогу без зависимоти от этой гнусной msvcrt.dll (с ключом /MT). По идее как-то можно это осуществить и на MinGW... Склоняюсь к мнению, что надо где-то раскопать статическую libmsvcrt.a Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
timm 0 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба Всё правильно: msvcrt.dll - это, так называемый run-time, она же libc, в числе прочего содержит реализацию printf(). VS имеет статическую версию этой библиотеки. mingw весь построен вокруг msvcrt.dll, поскольку её использование не подпадает под лицензионные ограничения. собственной libc у mingw нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба Я выше писал, что на VS получается сбилдить прогу без зависимоти от этой гнусной msvcrt.dll (с ключом /MT). По идее как-то можно это осуществить и на MinGW... Склоняюсь к мнению, что надо где-то раскопать статическую libmsvcrt.aДля борланда и VS есть тулзы implib и impdef. Что касается MinGW, так задайте вопрос на www.mingw.org. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба попробуйте забить на микросовтовскую. libc много реализаций. например newlib залез в исходники увидел что подерживает i386 и x86_64, хотел было радостно предложить но оказалось что это порты платформенозависимых частей ( это crt код и реализация системных вызовов например) реализованы только для платформы linux и кажется wince(не стал смотреть - неинтересно). для cygwin (это бы Вам подошлобы ) только заглушки - плюнули и бросили вроде. для mingw32 вообще намека нет. короче говоря под это говно(ессесено это мое мнение) - win32/64 ребята не сделали порт системных вызовов. Поглядев как это сделано для линукса видно что очень просто доделать для масдая.... только кому это нада? вобщем вывод такой - взять найти реализацию libc которая собередся для масдая, уверен что их есть :) нада поискать. глянуд че собирается под cygwin int main() {} бинарник тянет libcygwin1.dll и kernel32.dll - тоесть у цигвина своя libc, прогрес налицо. цигвин есть в исходниках.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба бинарник тянет libcygwin1.dll и kernel32.dll - тоесть у цигвина своя libc, прогрес налицо. цигвин есть в исходниках.... Плюс к тому - если собрать либц от цигвина и примастырить к мингв - сразу починится извечный глюк мингв, связанный с ftell/fseek по текстовым файлам (из-за CR/CRLF), из-за которого есть проблема компиляции асм-исходников, напичканных инклудами и макросами, бинутилсовским as, собранным с мингв. Так что, в общем, я бы не советовал пользоваться мингв вообще, а если пользоваться, знать о таких нюансах. В свое время, когда бинутилсы портировал, столько частей тела себе отбил об этот мингв... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
timm 0 14 декабря, 2009 Опубликовано 14 декабря, 2009 · Жалоба libc от сигвина имитирует маленький юникс - с жесткими и мягкими ссылками, многопользователькой защитой и другими полезностями. Едва-ли это облегчит портирование куда-то еще. BTW мингв умеет линковатся с статической библиотекой от VS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться