Jump to content

    

Можно ли задать inline функцию, если она определена в другом файле?

не совсем

Вам уже про LTO советовали, а я повторюсь, что и у Кейла есть галочка типа "link-time code generation" - это фактически аналог LTO от gcc.

В таком режиме все функции рассматриваются компилятором как static...

Share this post


Link to post
Share on other sites
не совсем

Вам уже про LTO советовали, а я повторюсь, что и у Кейла есть галочка типа "link-time code generation" - это фактически аналог LTO от gcc.

В таком режиме все функции рассматриваются компилятором как static...

Не галочка - опция.

--ltcg

This option instructs the compiler to create objects in an intermediate format so that Link-Time Code Generation (LTCG) optimizations can be performed. The optimizations applied include cross-module inlining to improve performance, and sharing of base addresses to reduce code size.

 

Note

This option might significantly increase link time and memory requirements. For large applications it is recommended that you do the code generation in partial link steps with a subset of the objects.

 

The LTCG feature is deprecated. As an alternative ARM recommends you use the --multifile option.

 

Example

The following example shows how to use the --ltcg option.

 

armcc -c --ltcg file1.c

armcc -c --ltcg file2.c

armlink --ltcg file1.o file2.o -o prog.axf

 

Из галочек есть

Use Cross-module optimization

 

Понял, нужно читать помощь по Кейлу! :)

Share this post


Link to post
Share on other sites
Это заменяет

 

?

Нет, это просто защита от повторного включения внутри единицы компиляции, коей является c/cpp файл.

аналог #pragma once

 

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

 

Share this post


Link to post
Share on other sites
Нет, это просто защита от повторного включения внутри единицы компиляции, коей является c/cpp файл.

аналог #pragma once

 

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

То, что я показал, позволяет мне в одном общем file.h собрать заголовочные файлы для всех составляющих проекта, и потом подключать только его во все files.c.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this