otra - referencia no definida al llamar a la función en línea
mandar a llamar una funcion php (1)
De acuerdo con el manual , passing -std=gnu11
habilita C99 en lugar de la semántica en línea de GNU.
Esto significa que en inline
, en inline
static inline
y en extern inline
comportan de manera diferente. En particular, inline
espera una definición externa en una unidad de traducción separada (que puede proporcionar sin duplicar la definición; consulte esta respuesta ).
Estoy obteniendo un error realmente extraño de GCC 4.8.1 con funciones en línea.
Tengo dos funciones en línea casi idénticas definidas en los archivos de encabezado ( debug.h
y error.h
) en src/include/
, con la única diferencia de lo que imprimen: uno debug.h
error.h
DEBUG:
al mensaje, y el otro %s: error: %s
(nombre del programa, mensaje de error). Al definir las funciones tanto en línea como compilando una compilación de depuración (para que establezca la macro DEBUG=1
), obtengo muchos errores de referencia no definidos:
src/main_debug.o
gcc -osrc/main_debug.o src/main.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="/"gcc/"" -DCFLAGS="/"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g/"" -DDEBUG=1 -DBTCWATCH_VERSION="/"0.0.1/""
src/lib/btcapi_debug.o
gcc -osrc/lib/btcapi_debug.o src/lib/btcapi.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="/"gcc/"" -DCFLAGS="/"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g/"" -DDEBUG=1
src/lib/libbtcapi_debug.a
ar rc src/lib/libbtcapi_debug.a src/lib/btcapi_debug.o
ranlib src/lib/libbtcapi_debug.a
src/lib/cmdlineutils_debug.o
gcc -o src/lib/cmdlineutils_debug.o src/lib/cmdlineutils.c -c -Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g -DCC="/"gcc/"" -DCFLAGS="/"-Wall -Wextra -Wpedantic -std=gnu11 -march=native -Og -g/"" -DDEBUG=1
src/lib/libcmdlineutils_debug.a
ar rc src/lib/libcmdlineutils_debug.a src/lib/cmdlineutils_debug.o
ranlib src/lib/libcmdlineutils_debug.a
debug
gcc -obtcwatch-debug src/main_debug.o -Lsrc/lib/ -lbtcapi_debug -lcmdlineutils_debug -lcurl -ljansson
src/main_debug.o: In function `main'':
/home/marcoms/btcwatch/src/main.c:148: undefined reference to `debug''
src/main_debug.o:/home/marcoms/btcwatch/src/main.c:185: more undefined references to `debug'' follow
collect2: error: ld returned 1 exit status
make: *** [debug] Error 1
Pero cambiar la definición de debug()
a static inline
elimina los errores. Pero nunca he recibido ningún error de la definición de error()
, aunque su defensa está en inline
, y no static inline
.
Las definiciones están todas en encabezados (es decir, no prototipadas)