Может ли статический компоновщик gcc правильно встроить функции из статической библиотеки? - PullRequest
0 голосов
/ 08 декабря 2010

Если мы скомпилируем несколько исходных кодов, использующих статическую библиотеку с именем lib.a, будут ли встроенные функции в lib.a правильно встроены в остальные двоичные файлы?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2010

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

Если вам интересно, могут ли функции, объявленные как встроенные, которые были встроены в библиотеку, также вставляться при ссылке на конечный продукт ... это будет зависеть от реализации и, если предположить, что она уже поддерживает LTO (поскольку он сделал это с библиотекой), он вполне мог бы включить их снова. От вас может потребоваться, чтобы реализация включала определение, даже если оно везде вставлено, хотя ... все зависит от реализации.

http://crazyeddiecpp.blogspot.com/2010/12/inline-functions-and-you.html

0 голосов
/ 08 декабря 2010

нет, они не будут.Встраивание - это операция в дереве синтаксического анализа, для которой требуется доступ к исходному коду как для основного, так и для донорского источников встроенного кода.

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


Тем не менее, код, который не является встроенным, также является "правильным" и будет работать нормально (при условии, что он вообще скомпилирован в статическую библиотеку).

...