У меня проблемы с созданием очень больших объектных файлов. Мы работаем с VxWorks 5.5.1, но у нас есть GCC 4.1.2.
Наши модули имеют размер примерно 6,2 МБ, и мы ищем способы уменьшить это. Проблема, как представляется, в основном вызвана чрезмерным использованием шаблонов. При сбросе символов в файле с помощью nm
Я получаю текстовый файл размером 1,8 МБ. Это говорит мне, что почти четверть файла — это только имена. Есть ли способ уменьшить размер файла?
Следующие подходы не сработали:
--strip-all
кажется, не имеет никакого эффекта — вывод такой же, как при использовании --strip-debug
--gc-sections
потому что он не поддерживается для этой платформы (опция просто игнорируется)Я понимаю, что VxWorks связывает код во время загрузки, но все, что он должен связать, это библиотека времени выполнения C ++, и я не хочу, чтобы какие-либо символы добавлялись в глобальную таблицу символов, поэтому должен быть способ убрать эту информацию , право?
Для справки, вот моя версия компоновщика:
i386-wrs-vxworks-ld.exe --version
>>> GNU ld (Wind River VxWorks G++ DWARF-EH 4.1-131) 2.17.50.20070509
>>> SPR fixes: cq103489 cq111170 cq116027 cq116652 cq118878 cq125145
и моя версия компилятора:
i386-wrs-vxworks-g++.exe --version
>>> i386-wrs-vxworks-g++.exe (GCC) 4.1.2
Я понимаю, что вы имеете в виду, когда хотите убрать символы с объекта. Но если бы вы удалили все символы, у вас не было бы никакого символа, который можно было бы использовать в качестве точки входа для запуска приложения. Но я верю, что у тебя все еще есть варианты. К сожалению, VxWorks 5 известен не очень эффективным компилятором C ++.
Если вы скомпилировали свое приложение в * .a (архив, то есть статическая библиотека), вы сможете связать это с вашей операционной системой во время сборки и вызывать это из usrAppInit.c. Это должно позволить удалять символы или, по крайней мере, перемещать их в необязательную загруженную таблицу символов. В свойствах сборки приложения выберите вкладку «Макросы» и добавьте свой архив в макрос LIBS.
Чтобы создать архив, перейдите в свойства сборки и выберите вкладку «Правила», затем выберите архив в раскрывающемся списке.
Чтобы уменьшить размер вашей ОС (с вашим приложением, связанным), измените настройки vxworks. Отключите столько компонентов, сколько сможете. Также обязательно используйте загруженную таблицу символов (компоненты средства разработки -> компоненты таблицы символов -> компоненты инициализации таблицы символов -> инициализация таблицы символов выбора -> загруженная таблица символов).
Это удалит все символы из ОС и создаст загружаемую таблицу символов, которую можно будет загрузить после отладки для отладки.
Удачи!
PS. Убедитесь, что вы отключили отладку (-g) в вашем компиляторе. Может быть, мы могли бы помочь больше, если вы разместите свои ключи компилятора.
То, как мы обычно справляемся с этим, заключается в сжатии изображения. Вам также нужно будет собрать bootrom, чтобы он распаковывался в RAM перед запуском. Я считаю, что есть стандартные опции makefile, которые позволят вам сделать это.