2010-05-12 3 views
8

Когда я просматриваю код, сгенерированный gcc -v -o proggy.exe proggy.o, я обнаружил, что командная строка расширяется в большой набор параметров библиотеки и библиотек, все из которых связаны с помощью collect2.exe. Что случилось с ld.exe? Почему я этого не вижу? Может кто-нибудь объяснить мне, что делает collect2.exe?Что делает collect2.exe?

ответ

8

collect2 - это утилита, используемая для создания таблицы конструкторов, которая __main (автогенерированная функция, называемая в начале main) зависит от. Обычно вы не видите его, потому что он называется ld в файловой системе, и он в свою очередь вызывает реальный ld (обычно называется real-ld, хотя collect2 проверяет количество мест, которые его ищут)

+0

Mr. Mrozek, Спасибо за ваш ответ. Следующий вопрос: если я использую LD.EXE в командной строке, что происходит с кодом? Предположим, что у меня есть ld.exe -L/some_lib proggy.o -lsome_lib_lib. Как это расширяется? Ваш предыдущий ответ на мой первоначальный вопрос был очень полезным! Спасибо, Mark – allynm

+1

Стоит отметить, что современные системы ELF не нуждаются в этой коллекции (что, конечно же, является неприятным взломом). Они используют секции ctors и dtors ELF для кон- деструкторов. –

4

GCC использует утилиту под названием collect2 почти во всех системах, чтобы организовать вызов различных функций инициализации во время запуска. [link]

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