Я хочу определить встроенную функцию в заголовочном файле (.h), который может быть включен в многочисленные исходные файлы (.c).Вот минимальный пример с 1 заголовком и 2 исходными файлами:
Заголовочный файл foo.h
int ifunc(int i);
extern inline
int
ifunc(int i)
{
return i + 1;
}
Исходный код файла: foo.c
#include <stdio.h>
#include "foo.h"
int foo2(int i);
int main()
{
printf("%d\n", foo2(1));
return 0;
}
Файл исходного кода foo2.c
#include "foo.h"
int foo2(int i)
{
return ifunc(i);
}
Проблема
Когда я компилирую соптимизация,
gcc -g -Wall -O2 -o foo foo.c foo2.c
$ ./foo
2
все отлично работает.Однако, когда я отключаю оптимизацию, я получаю эту ошибку:
gcc -g -Wall -o foo foo.c foo2.c
/tmp/cc3OrhO9.o: In function `foo2':
foo2.c:5: undefined reference to `ifunc'
Может кто-нибудь объяснить, как это исправить, чтобы я мог запустить код с и без -O2?Я использую gcc 4.8.5.