Шаблоны - огромный объектный файл вызывает сбой компоновщика - PullRequest
4 голосов
/ 25 августа 2011

У меня есть исходный файл, который широко использует шаблоны. У меня также есть в этом файле явные экземпляры различных шаблонов ... их много. Этот файл скомпилирован как часть статической библиотеки. Я собираю это библиотека на нескольких платформах \ для нескольких архитектур: Win x86, Linux x86 и Linux ARM. Для сборок Linux я использую разные компиляторы поэтому результирующие файлы (я говорю здесь в контексте файла ELF само по себе) разные: для GCC результирующий объектный файл имеет размер 8,4 МБ и имеет чуть более 40000 секций ELF; для компилятора ARM (armcc) результирующий файл имеет размер 12,7 МБ и более 90000 ELF секции (!); в обоих случаях у меня есть отладочная информация.

Что происходит, когда во время соединения компоновщик ARM задыхается и умирает, пытаясь связать этот огромный объектный файл в статической библиотеке. После некоторого расследования кажется что он не может обрабатывать объектные файлы с более чем 65536 ELF-разделами в нем (у меня все еще есть чтобы получить подтверждение от поставщика компилятора, хотя ... или я делаю что-то совершенно и совершенно не так). Решение, которое я нашел для этого, разделяет файл в несколько меньших файлов (это структура и то, что внутри было разрешено для этого).

Вопрос (ы): есть ли другое альтернативное решение? Будет ли это возможно для компилятора генерировать дополнительный код в объектном файле (в контексте шаблонов) до фазы связывания?

1 Ответ

1 голос
/ 25 августа 2011

С помощью компилятора ARM RVCT (armcc) попробуйте добавить --remove_unneeded_entities в командную строку. Это может или не может иметь большого эффекта в зависимости от того, какую версию компилятора вы используете, но стоит попробовать

...