· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› LNK2019 - :0

Посл.отвђт Сообщенiе


Дата: Ноя 10, 2003 17:42:51

Привет.
В MS VC++ 7.0 написал прогу, ну
и не линкуется она с одной либой: Miracl.
Вот что линкер выдаёт:

LIBC.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function _mainCRTStartup
Release/snatch.exe : fatal error LNK1120: 1 unresolved externals

Runtime library не использую: своя точка входа.
Поэтому наверно и ошибка лезет.
Хмм.. но ведь main() - для консольных приложений.
Что делать? Это ведь можно как-то обойти?
P.S.
Ногами сильно не бейте - новичёк ведь ещё. d:)
Заранее благодарен.


Дата: Ноя 10, 2003 18:09:55

Ногами сильно не бейте

Честно? А надо бы.
main - для любых приложений. И пора бы уже посмотреть код crt0.c - там и увидишь - что мэинов - 4 штуки.


Дата: Ноя 10, 2003 22:59:47

Посмотрел.. ясно...
Но как воспользоваться либой?..
Без runtime кода никак?


Дата: Ноя 11, 2003 00:04:56

С-приложений без main не бывает.


Дата: Ноя 11, 2003 00:46:03

Поиграйся с настройками линкера. Там можно задать свою точку входа в программу, да и игнорировать одну или все default библиотеки.


Дата: Ноя 11, 2003 02:43:29

snatch

Ты не читал _http://www.uinc.ru/articles/28/index.shtml


Дата: Ноя 11, 2003 16:04:14

Эту статью я читал. Спасибо, Asterix.
С опциями линкера играл: установил
свою собственную entry point, там GetModuleHandle
ну и поехали, но тогда линкер тщательно ищет
symbol _main referenced in function _mainCRTStartup
и всё... Если дефаултовые либы отключить, то
тогда все функции, которые я из Miracl.lib
вызываю, становятся unresolved externals..
Ага.. В IDA'е поглядел, что вот функции
либы выделяют себе в Heap'е память для работы,
но сам указатель на кучу получен в рантайм коде,
его то они и используют. Тут получается, что по любач
нужен рантайм код. Ну а если его самому модифицировать:
сделать маленьким - интересно будет работать?..
А то там аж 30 кб почти получается.
Гы: интересный там рантайм код, в MS VC++ 7.0
(или и в других версиях такой же): вообщем получает imagebase
и затем идут проверки на валидность самого pe-файла
уже загруженного. хмм.. зачем это? Типа что ли загрузчик
плюнул да и загрузил чёрт ти что в память, ну а мы сами там
ещё раз проверимся: мало ли чего там записалось пока "я" -
рантайм код упрвление получил... :p
Да и ещё и FileAligment задать линкеру не удаётся: говорит
не знает он такой опции. 0x1000 аж делает.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.222