[MinGW, gcc] Своя точка входа в программу
--entry=_my_main хавает.
И кстати, все равно
Warning: resolving _my_main by linking to 0
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
Где бы почитать про это поподробнее можно?
Где бы почитать про это поподробнее можно?
--enable-stdcall-fixup
--disable-stdcall-fixup
If the link finds a symbol that it cannot resolve, it will attempt to do "fuzzy linking" by looking for another defined symbol that differs only in the format of the symbol name (cdecl vs stdcall) and will resolve that symbol by linking to the match. For example, the undefined symbol _foo might be linked to the function 12, or the undefined symbol 16 might be linked to the function _bar. When the linker does this, it prints a warning, since it normally should have failed to link, but sometimes import libraries generated from third-party dlls may need this feature to be usable. If you specify --enable-stdcall-fixup, this feature is fully enabled and warnings are not printed. If you specify --disable-stdcall-fixup, this feature is disabled and such mismatches are considered to be errors.
И кстати, все равнону значит надо так:
code resolving _my_main by linking to 0
--entry=0
и больше никаких ворнингов
просто это команда не компилятору, а линковщику
сначала твой код компилируется, при этом функция my_main превращается в 0
после этого то что получилось линкуется и именно в этом месте используется параметр --entry
Только вот понимания мне это не добавило
Я имел ввиду не где про ворнинг почитать (т.к. считаю, что ворнинги надо исключать, а не отключать) а про объявление точек входа.
Нужно ли __stdcall? Что за цифры после @ в 0? Почему _my_main, а не просто my_main? И т.п....
0?
да, количество параметров, почему? - исторически сложилось
Нужно ли __stdcall? Что за цифры после @ в да, количество параметров, почему? - исторически сложилось
почему? - исторически сложилосьну дык как по-другому различать функции с разным числом параметров и одним именем?
Вроде бы не параметров, а байт, которые они занимают в стеке
ну дык как по-другому различать функции с разным числом параметров и одним именем?Ну так в си ж такого нет. Тем более, что я в каком-то языке перегружал функции с одинковым количеством параметров, но разными принимаемыми типами...
Тем более, что задача отлинковки стандартной библиотеки (судя по размеру) достигнута
Хотя, конечно, хотелось бы разобраться...
Оставить комментарий
feliks28
Повелся на статью Пытаюсь повторить.Для начала почти пустой файл test.c:
Пытаюсь скомпилировать (без прагм, только флагами):
gcc -nostartfiles -nodefaultlibs -nostdlib test.c -Wl,--entry=my_main
Ругается:
Как тогда правильно назначить собственную точку входа?
p.s. В комментариях статьи вычитал что "MS линкер любит пошалить и запихивает в PE-файл (между стабом DOS и началом PE-заголовка) какой-то "мусор". Что же это за "мусор"? Так вот, туда попадает слово "Rich" + compid (!) вашей машины, поксоренный определенным ключом!"
Еще какие-нибудь линкеры балуются подобным образом?