Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
 |  |  |
Так и в gcc он компилится нормально 18.02.04 00:08 Число просмотров: 1355
Автор: amirul <Serge> Статус: The Elderman
|
> Этот же кусок кода VC++ нормально компилит. Без ошибок. > Думаю что-то в опциях к этому gcc. Вообще Dev-Cpp > пользуюсь. > Люблю gcc && не люблю VC++. Однако..... Материться начинает линкер. Ладно, не хошь сам искать - я уже поискал
Бывает 4 различных точки входа:
mainCRTStartup(void)
wmainCRTStartup(void)
WinMainCRTStartup(void)
wWinMainCRTStartup(void)
---
Для main, wmain, WinMain и wWinMain соответственно. То бишь они готовят нужные данные (в частности первые две распарсивают командную строку на argc/argv) и вызывают соответсвующую функцию.
Линкер ничего не знает о том, что ты компилил проект со включенным юникодом и более того он не знает, что на самом деле компилировалось консольное, а не Win32 приложение. Не знаю как (скорее всего по умолчанию) у тебя в качестве точки входа используется WinMainCRTStartup, которая в библиотеке есть. Но она вызывает WinMain и этим ставит неразрешимую связь, на которую и ругается линкер.
Как автоматизировать это дело я не знаю. Но лечится заменой точки входа на нужную. В твоем случае это wmainCRTStartup
|
|
<beginners>
|
unicode + ansi + winapi + gcc3.2 17.02.04 12:55
Автор: deb Статус: Незарегистрированный пользователь
|
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int _tmain(int argc, TCHAR *argv[])
{
if (argc == 2)
{
if (!lstrcmp (argv [1], TEXT("--install")))
{
_tprintf (TEXT("Hello"));
}
}
}
Не думаю что валить надо на компилятор и все же.
Ругается: [Linker error] undefined reference to `WinMain@16'
|
 |
Я не научился бороться с этим правильно 17.02.04 14:35
Автор: amirul <Serge> Статус: The Elderman
|
> Не думаю что валить надо на компилятор и все же. > Ругается: [Linker error] undefined reference to > `WinMain@16' Это линкер. И надо ему явно подставить точку входа. Там их две: одна юникодная, другая ансишная - поищи сам. Так вот я просто вручную в проекте забивал новую точку входа (юникодную)
|
 |  |
Этот же кусок кода VC++ нормально компилит. Без ошибок.
17.02.04 22:53
Автор: deb Статус: Незарегистрированный пользователь
|
Этот же кусок кода VC++ нормально компилит. Без ошибок.
Думаю что-то в опциях к этому gcc. Вообще Dev-Cpp пользуюсь.
Люблю gcc && не люблю VC++. Однако.....
|
 |  |  |
Так и в gcc он компилится нормально 18.02.04 00:08
Автор: amirul <Serge> Статус: The Elderman
|
> Этот же кусок кода VC++ нормально компилит. Без ошибок. > Думаю что-то в опциях к этому gcc. Вообще Dev-Cpp > пользуюсь. > Люблю gcc && не люблю VC++. Однако..... Материться начинает линкер. Ладно, не хошь сам искать - я уже поискал
Бывает 4 различных точки входа:
mainCRTStartup(void)
wmainCRTStartup(void)
WinMainCRTStartup(void)
wWinMainCRTStartup(void)
---
Для main, wmain, WinMain и wWinMain соответственно. То бишь они готовят нужные данные (в частности первые две распарсивают командную строку на argc/argv) и вызывают соответсвующую функцию.
Линкер ничего не знает о том, что ты компилил проект со включенным юникодом и более того он не знает, что на самом деле компилировалось консольное, а не Win32 приложение. Не знаю как (скорее всего по умолчанию) у тебя в качестве точки входа используется WinMainCRTStartup, которая в библиотеке есть. Но она вызывает WinMain и этим ставит неразрешимую связь, на которую и ругается линкер.
Как автоматизировать это дело я не знаю. Но лечится заменой точки входа на нужную. В твоем случае это wmainCRTStartup
|
 |  |  |  |
Я это в курсе.
18.02.04 00:48
Автор: deb Статус: Незарегистрированный пользователь
|
Я это в курсе.
Я говорил про опцию /SUBSYSTEM для vc++ линкера.
И про /ENTRY.
Просто я не в курсе gcc(правильнее наверно ld) поддреживает это или нет.
|
 |  |  |  |  |
entry точно поддерживает 18.02.04 01:52
Автор: amirul <Serge> Статус: The Elderman
|
> Я это в курсе. > Я говорил про опцию /SUBSYSTEM для vc++ линкера. > И про /ENTRY. > Просто я не в курсе gcc(правильнее наверно ld) поддреживает > это или нет. Не помню ключа - читай man. А подсистемы должен поддерживать если вообще работает с PE файлами.
|
|
|