Я тоже не знаю что это Я забыл где взял эту либу, а строка изнути либы для идентификации. Могу куданить закачать.
2 bober А вы с этой libc.lib собирали без использования /FORCE:UNRESOLVED для линкера? (дело в том что я попробовал собрать с этой опцией, используя libc.lib из MSVC++ 6.0, и получил в общем то похожий результат - )
Я только запустил твой батник и все Чесно говоря я несовсем понял почему так много внимания именно libc.lib. Я думаю что msvcrt.lib, libc.lib, LIBCMT.lib, crtdll.lib все из одной оперы можно выбрать самую толстую из них менять имена и все прокатит.
2 bober по поводу msvcrt.lib и crtdll.lib: мне все таки хотелось бы сохранить независимость приложения от наличия msvcrt.dll... а по поводу LIBCMT.lib: я пробовал подключать её вместо libc.lib но результат был тот же - Я попробую перебрать libc.lib из MSVC если прокатит сообщу...
Она присутствует практически во всех версиях Win32. Тебе проще прилинковать кучу кода, чем растратиться на пару записей в импорте?
2 bober libc.lib перебрал получил, что если заменить __imp__Get__imp__GetEnvironmentStrings@0 на __imp__Get__imp__GetEnvironmentStringsA@0 то указанная выше ошибка не появляется и сборка завершается успешно, но полученный таким образом exe файл содержит ошибки вызовов импотируемых функций причём ошибки появляются не сразу, а начиная с _WinMain@16 - Может быть можно как то внести в libc.lib такое изменение без полной переборки?
2 IceStudent Наверное придётся делать так как вы говорите если с libc.lib совсем ничего не выйдет, хотя я надеюсь что я её всё таки сумею корректно подрубить -
Если очень надо то можно ведь и ручками исправить. Кривые калы типа call _WinMain@16 на lea eax, _WinMain@16 call eax
2 bober C вызовом _WinMain@16 всё OK, я имел ввиду что в теле _WinMain@16 начинаются некорректные вызовы импортируемых функций т.е все вызовы описанные в *.asm транслированны не корректно Если очень надо то можно ведь и ручками исправить ручками в принципе можно, но хочется получить решение не только для конкретного примера, но и для других возможных применений libc.lib -
По поводу некорректных вызовов: Нашел вот что: вместо короткого call компилится длинный ???? т.е должна была быть вызвана процедура по n адресу а компилится вызов по адресу расположенному n адресе Может сталкивался кто с таким? как это залечить?
По поводу последних вопросов: разобрался в чём дело... (листинги от MSVC требуют доработки напильником - )
acdel1 Я говорю о kernel32.LIB. Она точно содержит __imp__GetEnvironmentStrings@0. Пропиши kernel32.lib в командной строке линкера.
2 green Пропиши kernel32.lib в командной строке линкера Я попробовал сделать так: для libc.lib из MSVC 6.0 это не помогает - в общемто этого следовало ожидать т.к. kernel32.lib содержится в includelib... Я решил это по другому: заменил __imp__GetEnvironmentStrings@0 на __imp__GetEnvironmentStringsA@0 в libc.lib - теперь libc.lib подрубается без ошибок, приложение запускается, правда работает не совсем корректно, в чём причина ещё не выяснил... но вероятно уже не в libc.lib, так что эта проблема вроде как решилась... Благодарю всех за оказанную помощь.
Пятый год теме. Вы про что товарищ? Я в 2009 консультировал товарища : если у вас нормальный масм, то там все нужные библиотеки уже есть. Все остальное для мазохистов.