My application builds fine with -flto, but only if I do not also specify -std=c99.
If someone can help me, that would be wonderful. I have created a very simple test, below, to demonstrate the problem.
main.c:
#include "foo.h"
void main(int argc, char** argv) {
int input = atoi(argv[1]);
printf("%dn", foo(input));
}
foo.h:
inline int foo(int x);
foo.c:
#include "foo.h"
inline int foo(int x) {
while (x < 900) {
x += x;
}
return x;
}
Makefile:
CFLAGS += -flto -std=c99
LDFLAGS += -flto -std=c99
main : main.o foo.o
main.o : main.c foo.h
foo.o : foo.c foo.h
.PHONY : clean
clean :
$(RM) main main.o foo.o
Results of running make:
cc -flto -std=c99 -c -o main.o main.c
In file included from main.c:3:0:
foo.h:1:12: warning: inline function foo declared but never defined [enabled by default]
inline int foo(int x);
^
foo.h:1:12: warning: inline function foo declared but never defined [enabled by default]
cc -flto -std=c99 -c -o foo.o foo.c
cc -flto -std=c99 main.o foo.o -o main
/tmp/ccTDIBGZ.ltrans0.ltrans.o:ccTDIBGZ.ltrans0.o:function main: error: undefined reference to 'foo'
collect2: error: ld returned 1 exit status
make: *** [main] Error 1
Without the -std=c99 flags, make runs successfully and without warnings.