2015-12-12 5 views
0

я принял следующие аргументы командной строки для GCC:Как сообщить GCC не связываться с библиотекой времени выполнения и стандартной библиотекой?

gcc -e _main -nostdlib -nodefaultlibs -fno-exceptions -nostartfiles -fno-rtti -g C:\ntdll.cpp 

Он дал мне следующую ошибку:

/ cygdrive/c/Users/----/AppData/Local/Temp/ccDrwTbB.o: In function `main': 
C : \users\nabeel\desktop/ntdll.cpp:5 : undefined reference to `__main' 
C : \users\nabeel\desktop/ntdll.cpp:5 : (.text + 0x9) : relocation truncated to fit : R_X86_64_PC32 against undefined symbol `__main' 
collect2 : error : ld returned 1 exit status 

Любая идея, почему это может происходить?

//ntdll.cpp: 
int main() 
{ 
} 

GCC версии 4.9.3 на Windows (Cygwin)

+1

Если вы * только * хотите пропустить ссылки, вам не нужно весь этот материал. '-c' достаточно. – deviantfan

+0

@deviantfan Я не хочу пропустить ссылку, я хочу, чтобы она не ссылалась на ЭЛТ. –

ответ

1

Почему вы используете -nostartfiles вариант. С помощью этой опции вам необходимо определить свою собственную запись __start, которая подготовит среду и вызовет основную функцию. Удалить опцию -nostartfiles и повторите попытку. См https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

Как мои понять, что вам нужно сказать GCC не связать с библиотекой -nostdlibs выполнения и стандартной библиотекой -nodefaultlibs

One of the standard libraries bypassed by -nostdlib and -nodefaultlibs is libgcc.a, a library of internal subroutines that GCC uses to overcome shortcomings of particular machines, or special needs for some languages. (See Interfacing to GCC Output, for more discussion of libgcc.a.) In most cases, you need libgcc.a even when you want to avoid other standard libraries. In other words, when you specify -nostdlib or -nodefaultlibs you should usually specify -lgcc as well. This ensures that you have no unresolved references to internal GCC library subroutines. (For example, ‘__main’, used to ensure C++ constructors will be called; see collect2.)

+0

Я уже делаю это. –

+0

См. Мой обновленный комментарий – Danh

+0

Что я спрашиваю, так это почему '-e _main' выполняет свою работу и выбирает' main' в качестве точки входа? –

Смежные вопросы