Может ли gcc использовать несколько ядер при компоновке? - PullRequest
28 голосов
/ 28 февраля 2011

Таким образом, при компиляции множества исходных файлов с помощью GCC можно использовать -j, чтобы использовать все доступные ядра.Но как насчет компоновщика?Есть ли подобная опция для ускорения соединения или GCC не поддерживает многопоточность?В некоторых крупных проектах это может занять некоторое время ... (... и я не хочу ждать!)

Редактировать: Спасибо, что указали, что -j это опция дляи не gcc / g ++.Но это не отвечает на мой вопрос!Я хотел бы знать, может ли gcc использовать многопоточность при связывании программы!

Ответы [ 3 ]

9 голосов
/ 14 октября 2014

Try gold , разработанный Ian Lance Taylor et al.от Google и выпущен как часть пакета GNU binutils.

Из Википедии:

Мотивация для написания золота заключалась в создании компоновщика, который быстрее, чем компоновщик GNU, особенно для большихприложения, написанные на C ++

Я должен признать, что сам еще не пробовал, но это упомянуто на проекте WebKitGTK веб-странице.

Для получения дополнительной информации см. статьюнаписано автором золота: Новый ELF Linker .

Что еще более важно, см. работу по инкрементному / параллельному / параллельному соединению Сандера Матейса ван Вина под названием Параллельное соединение сGNU Gold Linker и библиография в нем.

7 голосов
/ 17 февраля 2017

lld , компоновщик, разработанный проектом LLVM, по умолчанию будет использовать несколько ядер. Я также обнаружил, что это примерно в 2 раза быстрее, чем золото, работающее с несколькими потоками (-Wl,--threads -Wl,--thread-count,xxx)

3 голосов
/ 28 февраля 2011

Опция -j, на которую вы ссылаетесь, обрабатывается make, а не gcc.

При использовании make -j n просит make выполнить действия в Makefile с несколькими параллельными процессами (замените n на число. В случае make -j 2 это 2 процесс).

Make хорошо справится с большинством задач синхронизации при выполнении параллельных сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...