Полагаю, причиной, по которой gcc жалуется на это, является ключевое слово static
, которое приводит к тому, что код этой функции выводится в любом модуле компиляции. Они просто не должны делать это так. Либо они будут использовать
- очистить стандартный код C99. Тогда им просто нужно обойтись
inline
без
static
и предоставить символ только в одной библиотеке, например, libc
- использовать расширения компилятора, такие как атрибут gcc (и, следовательно, clang)
always_inline
но никогда static
.
Кстати, у gcc есть расширение для этих операций (с префиксом __sync
IIRC), которое будет переносимым на другие системы, где есть gcc, clang, icc, opencc ...
Возможно, вы могли бы обойти это, добавив некоторые аргументы в вызов gcc. Попробуйте -std=c99
или выключите соответствующее предупреждение.