Встраивание функций из объектных файлов - PullRequest
4 голосов
/ 26 июля 2011

Я хочу указать некоторые функции, код которых у меня отсутствует.Они присутствуют в объектном файле.Есть ли способ сделать это с помощью gcc?

Другими словами, я хочу выполнить встраивание этих функций, связывая мои собственные файлы кода с объектным файлом, содержащим эти функции.

Ответы [ 2 ]

5 голосов
/ 26 июля 2011

Начиная с версии 4.5, GCC поддерживает ключ -flto, который включает оптимизацию времени соединения (LTO).LTO может встроить функции из отдельных объектных файлов.

Однако здесь есть одна загвоздка.Из-за способа работы -flto он будет полезен только для объектных файлов, которые были скомпилированы с использованием этого параметра.Как я понимаю, GCC реализует LTO, помещая промежуточную форму исходного кода в объектный файл - если этот промежуточный код отсутствует в объектном файле, код в этом объектном файле не будет «встроенным».

См. Может ли встроенный компоновщик функционировать? для некоторых дополнительных деталей.

2 голосов
/ 26 июля 2011

То, что вы хотите сделать, это как раз наоборот. Встраивание означает, что у вас есть источник, и вы хотите, чтобы компилятор генерировал код, как если бы этот источник был определен вместо вызывающего.

Что с некоторыми усилиями, возможно, можно было бы сделать, это извлечь объектный код и поместить его во вновь сгенерированный объектный код для ваших функций. Но это не имеет особого смысла: единственное преимущество встраивания состоит в том, что оптимизатор может работать через границы функций. Например, чтобы избежать разливов регистров, сделать постоянное распространение или устранить мертвый код. Все это было бы почти невозможно, если у вас есть только объект.

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