Can't make: implicit declaration of function ‘http_write_chunked’ - c

I'm trying to compile demo main file (https post with the chunked-encoding data) from github repo using, I have installed libghc-iproute-dev and libnl3.
gcc -o main -Imbedtls/include -fPIC -DHAVE_CONFIG_H -D_U_="attribute((unused))" main.c -O2 mbedtls/library/libmbedx509.a mbedtls/library/libmbedtls.a mbedtls/library/libmbedcrypto.a
I can't compile porgram, here is what I got:
main.c: In function ‘main’:
main.c:133:8: warning: implicit declaration of function ‘http_open_chunked’; did you mean ‘http_read_chunked’? [-Wimplicit-function-declaration]
if(http_open_chunked(&hi2, url) == 0)
^~~~~~~~~~~~~~~~~
http_read_chunked
main.c:137:12: warning: implicit declaration of function ‘http_write_chunked’; did you mean ‘http_read_chunked’? [-Wimplicit-function-declaration]
if(http_write_chunked(&hi2, data, size) != size)
^~~~~~~~~~~~~~~~~~
http_read_chunked
/tmp/cc7m6wMn.o: In function main': main.c:(.text.startup+0x3b): undefined reference to http_init'
main.c:(.text.startup+0x48): undefined reference to http_init' main.c:(.text.startup+0x59): undefined reference to http_open_chunked'
main.c:(.text.startup+0x9e): undefined reference to http_write_chunked' main.c:(.text.startup+0xd3): undefined reference to http_write_chunked'
main.c:(.text.startup+0x120): undefined reference to http_write_chunked' main.c:(.text.startup+0x139): undefined reference to http_strerror'
main.c:(.text.startup+0x157): undefined reference to http_close' main.c:(.text.startup+0x15f): undefined reference to http_close'
main.c:(.text.startup+0x19c): undefine
d reference to `http_read_chunked'
collect2: error: ld returned 1 exit status
I also tried to include netlink libraries, using:
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
And try to compile using the line:
gcc -o main -fPIC -DHAVE_CONFIG_H -D_U_="attribute((unused))" -O2 -I/usr/include/libnl3/netlink/ -Imbedtls/include main.c ApiService.c mbedtls/library/libmbedx509.a mbedtls/library/libmbedtls.a mbedtls/library/libmbedcrypto.a
Then I got:
ApiService.c:17:8: warning: implicit declaration of function ‘http_open_chunked’; did you mean ‘http_read_chunked’? [-Wimplicit-function-declaration]
if(http_open_chunked(&hi2, url) == 0)
^~~~~~~~~~~~~~~~~
http_read_chunked
ApiService.c:21:12: warning: implicit declaration of function ‘http_write_chunked’; did you mean ‘http_read_chunked’? [-Wimplicit-function-declaration]
if(http_write_chunked(&hi2, data, size) != size)
^~~~~~~~~~~~~~~~~~
http_read_chunked
ApiService.c: In function ‘getTask’:
ApiService.c:106:5: warning: format not a string literal and no format arguments [-Wformat-security]
sprintf(data, cJSON_Print(task));
^~~~~~~
https.c: In function ‘mbedtls_net_connect_timeout’:
https.c:496:18: error: ‘errno’ undeclared (first use in this function); did you mean ‘h_errno’?
else if( errno == EINPROGRESS )
^~~~~
h_errno
https.c:496:18: note: each undeclared identifier is reported only once for each function it appears in
https.c:496:27: error: ‘EINPROGRESS’ undeclared (first use in this function)
else if( errno == EINPROGRESS )
^~~~~~~~~~~
https.c:515:33: error: ‘EINTR’ undeclared (first use in this function); did you mean ‘NLE_INTR’?
if(errno == EINTR) continue;
^~~~~
NLE_INTR
Makefile:16: recipe for target 'compile' failed
Link to repo https://github.com/HISONA/https_client.
Please help I trying to compile that whole day, nothing works for me.

The implicit declaration of function error means that the compiler cannot locate the function in your workspace. you should indicate to the caller where the http_open_chunked function reside in your code by including the header (.h) file where it is impleented.

Related

Error trying to build aws-c-common package using CMake

Hi I was trying to install and build the aws-c-common package provided by AWS.
However I encountered below errors when I'm trying to execute below command:
cmake --build . && cmake --build . --target install && cd ..
Which is the command that I'm following from AWS Documentation Option B.
The error are shown as below (The error logs are very long and I can only pasted a portion of it here. But basically I can see error with each different file with different error reason, but I'm not sure why is it happening since I followed all the previous steps in the guide)
[1/58] Building C object CMakeFiles/aws-c-common.dir/source/log_formatter.c.obj
FAILED: CMakeFiles/aws-c-common.dir/source/log_formatter.c.obj
C:\MinGW\bin\gcc.exe -DAWS_AFFINITY_METHOD=AWS_AFFINITY_METHOD_NONE -DAWS_COMMON_EXPORTS -DAWS_COMMON_USE_IMPORT_EXPORT -DHAVE_AVX2_INTRINSICS -DUSE_SIMD_ENCODING -DWINDOWS_KERNEL_LIB=Kernel32 -
Daws_c_common_EXPORTS -Ibuild/aws-c-common/include -Igenerated/include -O3 -DNDEBUG -Wall -Wstrict-prototypes -fno-omit-frame-pointer -pedantic -Wno-long-long -fPIC -fvisibility=hidden -std=gnu9
9 -MD -MT CMakeFiles/aws-c-common.dir/source/log_formatter.c.obj -MF CMakeFiles\aws-c-common.dir\source\log_formatter.c.obj.d -o CMakeFiles/aws-c-common.dir/source/log_formatter.c.obj -c build/a
ws-c-common/source/log_formatter.c
In file included from build/aws-c-common/include/aws/common/array_list.h:210:0,
from build/aws-c-common/include/aws/common/byte_buf.h:8,
from build/aws-c-common/include/aws/common/string.h:7,
from build/aws-c-common/source/log_formatter.c:9:
build/aws-c-common/include/aws/common/array_list.inl: In function 'aws_array_list_debug_print':
build/aws-c-common/include/aws/common/array_list.inl:99:48: warning: unknown conversion type character 'z' in format [-Wformat=]
"arraylist %p. Alloc %p. current_size %zu. length %zu. item_size %zu. data %p\n",
^
build/aws-c-common/include/aws/common/array_list.inl:99:60: warning: unknown conversion type character 'z' in format [-Wformat=]
"arraylist %p. Alloc %p. current_size %zu. length %zu. item_size %zu. data %p\n",
^
build/aws-c-common/include/aws/common/array_list.inl:99:75: warning: unknown conversion type character 'z' in format [-Wformat=]
"arraylist %p. Alloc %p. current_size %zu. length %zu. item_size %zu. data %p\n",
^
build/aws-c-common/include/aws/common/array_list.inl:99:85: warning: format '%p' expects argument of type 'void *', but argument 4 has type 'size_t {aka const unsigned int}' [-Wformat=]
"arraylist %p. Alloc %p. current_size %zu. length %zu. item_size %zu. data %p\n",
^
build/aws-c-common/include/aws/common/array_list.inl:99:9: warning: too many arguments for format [-Wformat-extra-args]
"arraylist %p. Alloc %p. current_size %zu. length %zu. item_size %zu. data %p\n",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from build/aws-c-common/include/aws/common/byte_order.h:69:0,
from build/aws-c-common/include/aws/common/byte_buf.h:9,
from build/aws-c-common/include/aws/common/string.h:7,
from build/aws-c-common/source/log_formatter.c:9:
build/aws-c-common/include/aws/common/byte_order.inl: In function 'aws_hton64':
build/aws-c-common/include/aws/common/byte_order.inl:47:23: warning: implicit declaration of function 'htonl' [-Wimplicit-function-declaration]
return ((uint64_t)htonl(low)) << 32 | htonl(high);
^~~~~
build/aws-c-common/include/aws/common/byte_order.inl: In function 'aws_hton32':
build/aws-c-common/include/aws/common/byte_order.inl:63:38: warning: implicit declaration of function '_byteswap_ulong' [-Wimplicit-function-declaration]
return aws_is_big_endian() ? x : _byteswap_ulong(x);
^~~~~~~~~~~~~~~
build/aws-c-common/include/aws/common/byte_order.inl: In function 'aws_hton16':
build/aws-c-common/include/aws/common/byte_order.inl:145:38: warning: implicit declaration of function '_byteswap_ushort' [-Wimplicit-function-declaration]
return aws_is_big_endian() ? x : _byteswap_ushort(x);
^~~~~~~~~~~~~~~~
build/aws-c-common/source/log_formatter.c: In function 'aws_format_standard_log_line':
build/aws-c-common/source/log_formatter.c:155:29: warning: implicit declaration of function 'vsnprintf_s' [-Wimplicit-function-declaration]
int written_count = vsnprintf_s(
^~~~~~~~~~~
build/aws-c-common/source/log_formatter.c:158:13: error: '_TRUNCATE' undeclared (first use in this function)
_TRUNCATE,
^~~~~~~~~
build/aws-c-common/source/log_formatter.c:158:13: note: each undeclared identifier is reported only once for each function it appears in
[2/58] Building C object CMakeFiles/aws-c-common.dir/source/windows/rw_lock.c.obj
FAILED: CMakeFiles/aws-c-common.dir/source/windows/rw_lock.c.obj
C:\MinGW\bin\gcc.exe -DAWS_AFFINITY_METHOD=AWS_AFFINITY_METHOD_NONE -DAWS_COMMON_EXPORTS -DAWS_COMMON_USE_IMPORT_EXPORT -DHAVE_AVX2_INTRINSICS -DUSE_SIMD_ENCODING -DWINDOWS_KERNEL_LIB=Kernel32 -
Daws_c_common_EXPORTS -Ibuild/aws-c-common/include -Igenerated/include -O3 -DNDEBUG -Wall -Wstrict-prototypes -fno-omit-frame-pointer -pedantic -Wno-long-long -fPIC -fvisibility=hidden -std=gnu9
9 -MD -MT CMakeFiles/aws-c-common.dir/source/windows/rw_lock.c.obj -MF CMakeFiles\aws-c-common.dir\source\windows\rw_lock.c.obj.d -o CMakeFiles/aws-c-common.dir/source/windows/rw_lock.c.obj -c b
uild/aws-c-common/source/windows/rw_lock.c
build/aws-c-common/source/windows/rw_lock.c:9:22: fatal error: synchapi.h: No such file or directory
#include <synchapi.h>
^
compilation terminated.
[3/58] Building C object CMakeFiles/aws-c-common.dir/source/windows/clock.c.obj
FAILED: CMakeFiles/aws-c-common.dir/source/windows/clock.c.obj
C:\MinGW\bin\gcc.exe -DAWS_AFFINITY_METHOD=AWS_AFFINITY_METHOD_NONE -DAWS_COMMON_EXPORTS -DAWS_COMMON_USE_IMPORT_EXPORT -DHAVE_AVX2_INTRINSICS -DUSE_SIMD_ENCODING -DWINDOWS_KERNEL_LIB=Kernel32 -
Daws_c_common_EXPORTS -Ibuild/aws-c-common/include -Igenerated/include -O3 -DNDEBUG -Wall -Wstrict-prototypes -fno-omit-frame-pointer -pedantic -Wno-long-long -fPIC -fvisibility=hidden -std=gnu9
9 -MD -MT CMakeFiles/aws-c-common.dir/source/windows/clock.c.obj -MF CMakeFiles\aws-c-common.dir\source\windows\clock.c.obj.d -o CMakeFiles/aws-c-common.dir/source/windows/clock.c.obj -c build/a
ws-c-common/source/windows/clock.c
build/aws-c-common/source/windows/clock.c:13:8: error: unknown type name 'INIT_ONCE'
static INIT_ONCE s_timefunc_init_once = INIT_ONCE_STATIC_INIT;
^~~~~~~~~
build/aws-c-common/source/windows/clock.c:13:41: error: 'INIT_ONCE_STATIC_INIT' undeclared here (not in a function)
static INIT_ONCE s_timefunc_init_once = INIT_ONCE_STATIC_INIT;
^~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/clock.c:22:50: error: unknown type name 'PINIT_ONCE'
static BOOL CALLBACK s_get_system_time_init_once(PINIT_ONCE init_once, PVOID param, PVOID *context) {
^~~~~~~~~~
build/aws-c-common/source/windows/clock.c: In function 's_get_system_time_func_lazy_init':
build/aws-c-common/source/windows/clock.c:40:19: warning: implicit declaration of function 'InitOnceExecuteOnce' [-Wimplicit-function-declaration]
BOOL status = InitOnceExecuteOnce(&s_timefunc_init_once, s_get_system_time_init_once, NULL, NULL);
^~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/clock.c:40:62: error: 's_get_system_time_init_once' undeclared (first use in this function)
BOOL status = InitOnceExecuteOnce(&s_timefunc_init_once, s_get_system_time_init_once, NULL, NULL);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/clock.c:40:62: note: each undeclared identifier is reported only once for each function it appears in
[4/58] Building C object CMakeFiles/aws-c-common.dir/source/windows/condition_variable.c.obj
FAILED: CMakeFiles/aws-c-common.dir/source/windows/condition_variable.c.obj
C:\MinGW\bin\gcc.exe -DAWS_AFFINITY_METHOD=AWS_AFFINITY_METHOD_NONE -DAWS_COMMON_EXPORTS -DAWS_COMMON_USE_IMPORT_EXPORT -DHAVE_AVX2_INTRINSICS -DUSE_SIMD_ENCODING -DWINDOWS_KERNEL_LIB=Kernel32 -
Daws_c_common_EXPORTS -Ibuild/aws-c-common/include -Igenerated/include -O3 -DNDEBUG -Wall -Wstrict-prototypes -fno-omit-frame-pointer -pedantic -Wno-long-long -fPIC -fvisibility=hidden -std=gnu9
9 -MD -MT CMakeFiles/aws-c-common.dir/source/windows/condition_variable.c.obj -MF CMakeFiles\aws-c-common.dir\source\windows\condition_variable.c.obj.d -o CMakeFiles/aws-c-common.dir/source/wind
ows/condition_variable.c.obj -c build/aws-c-common/source/windows/condition_variable.c
In file included from build/aws-c-common/include/aws/common/allocator.h:8:0,
from build/aws-c-common/include/aws/common/common.h:12,
from build/aws-c-common/include/aws/common/condition_variable.h:9,
from build/aws-c-common/source/windows/condition_variable.c:6:
build/aws-c-common/source/windows/condition_variable.c: In function 'aws_condition_variable_init':
build/aws-c-common/source/windows/condition_variable.c:17:30: error: 'CONDITION_VARIABLE' undeclared (first use in this function)
AWS_STATIC_ASSERT(sizeof(CONDITION_VARIABLE) == sizeof(condition_variable->condition_handle));
^
build/aws-c-common/include/aws/common/macros.h:18:40: note: in expansion of macro 'AWS_STATIC_ASSERT0'
#define AWS_STATIC_ASSERT1(cond, line) AWS_STATIC_ASSERT0(cond, AWS_CONCAT(at_line_, line))
^~~~~~~~~~~~~~~~~~
build/aws-c-common/include/aws/common/macros.h:19:33: note: in expansion of macro 'AWS_STATIC_ASSERT1'
#define AWS_STATIC_ASSERT(cond) AWS_STATIC_ASSERT1(cond, __LINE__)
^~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:17:5: note: in expansion of macro 'AWS_STATIC_ASSERT'
AWS_STATIC_ASSERT(sizeof(CONDITION_VARIABLE) == sizeof(condition_variable->condition_handle));
^~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:17:30: note: each undeclared identifier is reported only once for each function it appears in
AWS_STATIC_ASSERT(sizeof(CONDITION_VARIABLE) == sizeof(condition_variable->condition_handle));
^
build/aws-c-common/include/aws/common/macros.h:18:40: note: in expansion of macro 'AWS_STATIC_ASSERT0'
#define AWS_STATIC_ASSERT1(cond, line) AWS_STATIC_ASSERT0(cond, AWS_CONCAT(at_line_, line))
^~~~~~~~~~~~~~~~~~
build/aws-c-common/include/aws/common/macros.h:19:33: note: in expansion of macro 'AWS_STATIC_ASSERT1'
#define AWS_STATIC_ASSERT(cond) AWS_STATIC_ASSERT1(cond, __LINE__)
^~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:17:5: note: in expansion of macro 'AWS_STATIC_ASSERT'
AWS_STATIC_ASSERT(sizeof(CONDITION_VARIABLE) == sizeof(condition_variable->condition_handle));
^~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:20:5: warning: implicit declaration of function 'InitializeConditionVariable' [-Wimplicit-function-declaration]
InitializeConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:13:32: error: 'PCONDITION_VARIABLE' undeclared (first use in this function)
#define AWSCV_TO_WINDOWS(pCV) (PCONDITION_VARIABLE) & (pCV)->condition_handle
^
build/aws-c-common/source/windows/condition_variable.c:20:33: note: in expansion of macro 'AWSCV_TO_WINDOWS'
InitializeConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c: In function 'aws_condition_variable_notify_one':
build/aws-c-common/source/windows/condition_variable.c:32:5: warning: implicit declaration of function 'WakeConditionVariable' [-Wimplicit-function-declaration]
WakeConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:13:32: error: 'PCONDITION_VARIABLE' undeclared (first use in this function)
#define AWSCV_TO_WINDOWS(pCV) (PCONDITION_VARIABLE) & (pCV)->condition_handle
^
build/aws-c-common/source/windows/condition_variable.c:32:27: note: in expansion of macro 'AWSCV_TO_WINDOWS'
WakeConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c: In function 'aws_condition_variable_notify_all':
build/aws-c-common/source/windows/condition_variable.c:38:5: warning: implicit declaration of function 'WakeAllConditionVariable' [-Wimplicit-function-declaration]
WakeAllConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:13:32: error: 'PCONDITION_VARIABLE' undeclared (first use in this function)
#define AWSCV_TO_WINDOWS(pCV) (PCONDITION_VARIABLE) & (pCV)->condition_handle
^
build/aws-c-common/source/windows/condition_variable.c:38:30: note: in expansion of macro 'AWSCV_TO_WINDOWS'
WakeAllConditionVariable(AWSCV_TO_WINDOWS(condition_variable));
^~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c: In function 'aws_condition_variable_wait':
build/aws-c-common/source/windows/condition_variable.c:46:9: warning: implicit declaration of function 'SleepConditionVariableSRW' [-Wimplicit-function-declaration]
if (SleepConditionVariableSRW(AWSCV_TO_WINDOWS(condition_variable), AWSMUTEX_TO_WINDOWS(mutex), INFINITE, 0)) {
^~~~~~~~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c:13:32: error: 'PCONDITION_VARIABLE' undeclared (first use in this function)
#define AWSCV_TO_WINDOWS(pCV) (PCONDITION_VARIABLE) & (pCV)->condition_handle
^
build/aws-c-common/source/windows/condition_variable.c:46:35: note: in expansion of macro 'AWSCV_TO_WINDOWS'
if (SleepConditionVariableSRW(AWSCV_TO_WINDOWS(condition_variable), AWSMUTEX_TO_WINDOWS(mutex), INFINITE, 0)) {
^~~~~~~~~~~~~~~~
In file included from build/aws-c-common/source/windows/condition_variable.c:9:0:
build/aws-c-common/include/aws/common/mutex.h:12:42: error: 'PSRWLOCK' undeclared (first use in this function)
# define AWSMUTEX_TO_WINDOWS(pMutex) (PSRWLOCK) & (pMutex)->mutex_handle
^
build/aws-c-common/source/windows/condition_variable.c:46:73: note: in expansion of macro 'AWSMUTEX_TO_WINDOWS'
if (SleepConditionVariableSRW(AWSCV_TO_WINDOWS(condition_variable), AWSMUTEX_TO_WINDOWS(mutex), INFINITE, 0)) {
^~~~~~~~~~~~~~~~~~~
build/aws-c-common/source/windows/condition_variable.c: In function 'aws_condition_variable_wait_for':
build/aws-c-common/source/windows/condition_variable.c:13:32: error: 'PCONDITION_VARIABLE' undeclared (first use in this function)
#define AWSCV_TO_WINDOWS(pCV) (PCONDITION_VARIABLE) & (pCV)->condition_handle
^
build/aws-c-common/source/windows/condition_variable.c:63:35: note: in expansion of macro 'AWSCV_TO_WINDOWS'
if (SleepConditionVariableSRW(AWSCV_TO_WINDOWS(condition_variable), AWSMUTEX_TO_WINDOWS(mutex), time_ms, 0)) {
^~~~~~~~~~~~~~~~
In file included from build/aws-c-common/source/windows/condition_variable.c:9:0:
build/aws-c-common/include/aws/common/mutex.h:12:42: error: 'PSRWLOCK' undeclared (first use in this function)
# define AWSMUTEX_TO_WINDOWS(pMutex) (PSRWLOCK) & (pMutex)->mutex_handle
^
build/aws-c-common/source/windows/condition_variable.c:63:73: note: in expansion of macro 'AWSMUTEX_TO_WINDOWS'
if (SleepConditionVariableSRW(AWSCV_TO_WINDOWS(condition_variable), AWSMUTEX_TO_WINDOWS(mutex), time_ms, 0)) {
^~~~~~~~~~~~~~~~~~~
[5/58] Building C object CMakeFiles/aws-c-common.dir/source/windows/file.c.obj
FAILED: CMakeFiles/aws-c-common.dir/source/windows/file.c.obj
C:\MinGW\bin\gcc.exe -DAWS_AFFINITY_METHOD=AWS_AFFINITY_METHOD_NONE -DAWS_COMMON_EXPORTS -DAWS_COMMON_USE_IMPORT_EXPORT -DHAVE_AVX2_INTRINSICS -DUSE_SIMD_ENCODING -DWINDOWS_KERNEL_LIB=Kernel32 -
Daws_c_common_EXPORTS -Ibuild/aws-c-common/include -Igenerated/include -O3 -DNDEBUG -Wall -Wstrict-prototypes -fno-omit-frame-pointer -pedantic -Wno-long-long -fPIC -fvisibility=hidden -std=gnu9
9 -MD -MT CMakeFiles/aws-c-common.dir/source/windows/file.c.obj -MF CMakeFiles\aws-c-common.dir\source\windows\file.c.obj.d -o CMakeFiles/aws-c-common.dir/source/windows/file.c.obj -c build/aws-
c-common/source/windows/file.c
build/aws-c-common/source/windows/file.c: In function 'aws_fopen':
build/aws-c-common/source/windows/file.c:18:17: error: 'EINVAL' undeclared (first use in this function)
errno = EINVAL;
^~~~~~
build/aws-c-common/source/windows/file.c:18:17: note: each undeclared identifier is reported only once for each function it appears in
build/aws-c-common/source/windows/file.c:27:9: warning: implicit declaration of function '_wfopen_s' [-Wimplicit-function-declaration]
if (_wfopen_s(&file, w_file_path, w_mode)) {
^~~~~~~~~
Does anyone know how to resolve this?
Thank you.

Makefile and program structure Raspberry Pi GCC

I' m trying to setup a simple tool to measure different aspects of a system. I build a project which can log an accelerometer, gyroscope and a magnetometer. I want full control of the the program so I decided not to use any usr/local kind of libraries and keep all files in the project folder. All files all working. I want to make the structure of my program as follows: https://www.dropbox.com/s/59s3si8spvkdq98/filestructure.png (not enough REP). I don't have much experience in making Makefiles, except changing a few variables. I work in the Embedded environment and mostly with IDE's.
I tried building my project with the following Makefile:
# Project name
NAME = TEST
# Tools
CC = gcc
CFLAGS = -o
# Paths
DRV_PATH = drivers
SRC_PATH = src
LIB_PATH = libs
# includes
INCLUDES = -I $(DRV_PATH) -I $(LIB_PATH) -I $(SRC_PATH)
# what files do we need to compile?
# libraries
MY_LIB = $(LIB_PATH)/bcm2835.c
# main files
MAIN = main.c
# src files
#MY_SRC = $(SRC_PATH)/vector.c
MY_SRC += $(SRC_PATH)/dcm.c
# select drivers to compile
DRV_SRC = $(DRV_PATH)/adxl345.c
DRV_SRC += $(DRV_PATH)/itg3200.c
DRV_SRC += $(DRV_PATH)/hmc5883l.c
DRV_SRC += $(DRV_PATH)/gy-85.c
DRV_SRC += $(DRV_PATH)/nrf24l01.c
# bundle files
ALL_SRC = $(MY_LIB) $(DRV_SRC) $(MY_SRC) $(MAIN)
OBJ = $(ALL:.c=.o)
BIN = $(ALL:.c=)
# make commands
all:
$(CC) $(CFLAGS) $(NAME) $(ALL_SRC)
debug:
$(CC) $(CFLAGS) $(NAME) $(ALL_SRC) -DDEBUG=1
imudebug:
$(CC) $(CFLAGS) $(NAME) $(ALL_SRC) -DIMUDEBUG=1
nrfdebug:
$(CC) $(CFLAGS) $(NAME) $(ALL_SRC) -DNRFDEBUG=1
I use the different make commands to generate some debug output.
The config file currently includes all files and is as follows:
#ifndef CONFIG_H
#define CONFIG_H
/* includes */
#include <stdio.h>
#include <math.h>
/* libs */
#include <bcm2835.h>
/* drivers */
#include "gy-85.h"
#include "adxl345.h"
#include "itg3200.h"
#include "hmcl5883l.h"
#include "nrf24l01.h"
/* src */
#include "dcm.h"
#endif // __CONFIG_H__
And the dcm.h file looks as follows. I tried t keep all .h files like this:
#ifndef DCM_H
#define DCM_H
#include <bcm2835.h>
#include <stdio.h>
#include <math.h>
#include "gy-85.h"
double pitch, roll, yaw;
double DCM_Matrix[3][3];
uint64_t stamp;
void resetFusion(void);
#endif
This is my make result:
gcc -o TEST libs/bcm2835.c drivers/adxl345.c drivers/itg3200.c drivers/hmc5883l.c drivers/gy-85.c drivers/nrf24l01.c src/dcm.c main.c
In file included from drivers/adxl345.c:1:0:
drivers/adxl345.h:4:21: fatal error: bcm2835.h: No such file or directory
compilation terminated.
In file included from drivers/itg3200.c:1:0:
drivers/itg3200.h:4:21: fatal error: bcm2835.h: No such file or directory
compilation terminated.
drivers/hmc5883l.c: In function ‘magInit’:
drivers/hmc5883l.c:7:30: error: ‘MAG_ADDR’ undeclared (first use in this function)
drivers/hmc5883l.c:7:30: note: each undeclared identifier is reported only once for each function it appears in
drivers/hmc5883l.c:14:17: error: ‘MODE’ undeclared (first use in this function)
drivers/hmc5883l.c:14:23: error: ‘CONTINUOUS’ undeclared (first use in this function)
drivers/hmc5883l.c:22:17: error: ‘CONA’ undeclared (first use in this function)
drivers/hmc5883l.c:22:23: error: ‘RATE_50HZ’ undeclared (first use in this function)
drivers/hmc5883l.c: In function ‘magRead’:
drivers/hmc5883l.c:37:30: error: ‘MAG_ADDR’ undeclared (first use in this function)
drivers/hmc5883l.c:38:18: error: ‘DATA’ undeclared (first use in this function)
drivers/hmc5883l.c: In function ‘magGetRegister’:
drivers/hmc5883l.c:60:13: error: ‘BCM2835_I2C_REASON_OK’ undeclared (first use in this function)
drivers/hmc5883l.c:61:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
drivers/hmc5883l.c: At top level:
drivers/hmc5883l.c:71:6: warning: conflicting types for ‘magGetRegisters’ [enabled by default]
drivers/hmc5883l.c:38:2: note: previous implicit declaration of ‘magGetRegisters’ was here
drivers/hmc5883l.c: In function ‘magGetRegisters’:
drivers/hmc5883l.c:79:13: error: ‘BCM2835_I2C_REASON_OK’ undeclared (first use in this function)
drivers/hmc5883l.c:80:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
drivers/hmc5883l.c: At top level:
drivers/hmc5883l.c:97:6: warning: conflicting types for ‘magSetRegister’ [enabled by default]
drivers/hmc5883l.c:14:2: note: previous implicit declaration of ‘magSetRegister’ was here
drivers/hmc5883l.c: In function ‘magSetRegister’:
drivers/hmc5883l.c:107:13: error: ‘BCM2835_I2C_REASON_OK’ undeclared (first use in this function)
drivers/hmc5883l.c:108:3: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
drivers/gy-85.c: In function ‘gyInit’:
drivers/gy-85.c:15:30: error: ‘BCM2835_I2C_CLOCK_DIVIDER_2500’ undeclared (first use in this function)
drivers/gy-85.c:15:30: note: each undeclared identifier is reported only once for each function it appears in
drivers/gy-85.c: In function ‘gyUpdate’:
drivers/gy-85.c:29:2: error: unknown type name ‘int16_t’
drivers/gy-85.c:30:2: error: unknown type name ‘uint8_t’
drivers/gy-85.c:32:9: error: ‘int16_t’ undeclared (first use in this function)
drivers/gy-85.c:32:18: error: expected expression before ‘)’ token
drivers/gy-85.c:40:18: error: expected expression before ‘)’ token
drivers/gy-85.c:47:18: error: expected expression before ‘)’ token
drivers/gy-85.c:61:2: warning: return from incompatible pointer type [enabled by default]
In file included from drivers/nrf24l01.c:1:0:
drivers/nrf24l01.h:5:21: fatal error: bcm2835.h: No such file or directory
compilation terminated.
In file included from src/dcm.c:1:0:
src/dcm.h:4:21: fatal error: bcm2835.h: No such file or directory
compilation terminated.
In file included from main.c:1:0:
config.h:9:21: fatal error: bcm2835.h: No such file or directory
compilation terminated.
make: *** [all] Error 1
If you can point out the main problem with my file structure I would be so glad!
Current error list:
gcc -o TEST -I libs -I drivers -I src libs/bcm2835.c drivers/adxl345.c drivers/itg3200.c drivers/hmc5883l.c drivers/gy-85.c drivers/nrf24l01.c src/dcm.c main.c
drivers/gy-85.c: In function ‘gyUpdate’:
drivers/gy-85.c:63:2: warning: return from incompatible pointer type [enabled by default]
main.c: In function ‘main’:
main.c:51:4: warning: passing argument 1 of ‘nrf24Transmit’ from incompatible pointer type [enabled by default]
drivers/nrf24l01.h:145:9: note: expected ‘uint8_t *’ but argument is of type ‘uint64_t *’
/tmp/ccOWR401.o:(.bss+0x0): multiple definition of `accelRaw'
/tmp/cc1gy1Bh.o:(.bss+0x0): first defined here
/tmp/ccOWR401.o:(.bss+0x8): multiple definition of `accelBias'
/tmp/cc1gy1Bh.o:(.bss+0x8): first defined here
/tmp/ccyZlhJe.o:(.bss+0x0): multiple definition of `accelRaw'
/tmp/cc1gy1Bh.o:(.bss+0x0): first defined here
/tmp/ccyZlhJe.o:(.bss+0x8): multiple definition of `accelBias'
/tmp/cc1gy1Bh.o:(.bss+0x8): first defined here
/tmp/ccUbOIyA.o:(.bss+0x0): multiple definition of `accelRaw'
/tmp/cc1gy1Bh.o:(.bss+0x0): first defined here
/tmp/ccUbOIyA.o:(.bss+0x8): multiple definition of `accelBias'
/tmp/cc1gy1Bh.o:(.bss+0x8): first defined here
/tmp/ccyZlhJe.o: In function `resetFusion':
dcm.c:(.text+0x38): undefined reference to `atan2'
collect2: ld returned 1 exit status
make: *** [all] Error 1
You don't have your includes in your rule
INCLUDES = -I $(DRV_PATH) -I $(LIB_PATH) -I $(SRC_PATH)
This just seems to dangle. Simplest solution to my eyes is to move down your CFLAGS definition and add in the includes:
INCLUDES = -I $(DRV_PATH) -I $(LIB_PATH) -I $(SRC_PATH)
CFLAGS = -o $(INCLUDES)
This way you don't have to change anything else. Of course, there are alternatives, this one just looks easiest.

How to compile C version of vtd-xml under linux (32 bit)

I've downloaded ximpleware_2.11_c.zip (C version of vtd-xml), when I
have tried to compile it under linux I've the following error messages:
In file included from vtdNav.c:19:
vtdNav.h:82: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.h:506: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.h: In function ‘writeIndex_VTDNav’:
vtdNav.c: At top level:
vtdNav.c:3410: error: conflicting types for ‘writeIndex_VTDNav’
vtdNav.h:347: error: previous declaration of ‘writeIndex_VTDNav’ was here
vtdNav.c: In function ‘dumpXML’:
vtdNav.c:3554: error: too many arguments to function ‘dumpXML2’
vtdNav.c: At top level:
vtdNav.c:3562: error: conflicting types for ‘dumpXML2’
vtdNav.h:362: error: previous declaration of ‘dumpXML2’ was here
In file included from vtdNav.c:19:
vtdNav.h:82: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.h:506: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.h: In function ‘writeIndex_VTDNav’:
vtdNav.h:507: error: ‘f’ undeclared (first use in this function)
vtdNav.h:507: error: (Each undeclared identifier is reported only once
vtdNav.h:507: error: for each function it appears in.)
vtdNav.h:507: error: too many arguments to function
‘vn->__writeIndex_VTDNav’
vtdNav.h: At top level:
vtdNav.h:675: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.h:695: error: expected declaration specifiers or ‘...’ before ‘FILE’
vtdNav.c: In function ‘_writeIndex2_VTDNav’:
vtdNav.c:3751: error: too many arguments to function ‘writeIndex_VTDNav’
vtdNav.c: In function ‘dumpXML’:
vtdNav.c:3874: error: too many arguments to function ‘dumpXML2’
vtdNav.c: At top level:
vtdNav.c:3882: error: conflicting types for ‘dumpXML2’
vtdNav.h:695: error: previous declaration of ‘dumpXML2’ was here
make: *** [vtdNav.o] Error 1
How can I build it under linux ?
Thanks for your response.
I've put
#include <stdio.h>
in :
vtdNav.h and in transcoder.h
and now it compile.
I'm sorry to have put a post to ask how to compile the examples. I have compiled them by modifying the makefile already present in ximpleware_2.11_c and in this way works:
CC=gcc
CFLAGS= -c -O3 -Wall -Winline -fgnu89-inline -fomit-frame-pointer-fforce-addr -frerun-cse-after-loop -fexpensive-optimizations -fregmove -frerun-loop-opt -fmerge-all-constants -fno-branch-count-reg -funroll-loops -fpeephole -march=core2-falign-functions -falign-loops -falign-jumps -freorder-blocks -freorder-functions-fprefetch-loop-arrays -funswitch-loops -fbranch-target-load-optimize2 -fvpt --paraminline-unit-growth=300 --param max-inline-recursive-depth=2 --param large-function-growth=600
CFLAGS2 = -c -ggdb
LDFLAGS = -O3 -fomit-frame-pointer -fforce-addr -frerun-cse-after-loop-fexpensive-optimizations -fregmove -frerun-loop-opt -march=core2 -lm
LDFLAGS2 = -ggdb
all : hello_world
hello_world: hello_world.o ../../arrayList.o ../../fastIntBuffer.o ../../fastLongBuffer.o ../../contextBuffer.o ../../vtdNav.o ../../vtdGen.o ../../autoPilot.o ../../XMLChar.o ../../helper.o ../../lex.yy.o ../../l8.tab.o ../../literalExpr.o ../../numberExpr.o ../../pathExpr.o ../../filterExpr.o ../../binaryExpr.o ../../unaryExpr.o ../../funcExpr.o ../../locationPathExpr.o ../../intHash.o ../../unionExpr.o ../../decoder.o ../../XMLModifier.o ../../nodeRecorder.o ../../indexHandler.o ../../bookMark.o ../../elementFragmentNs.o ../../transcoder.o ../../textIter.o ../../variableExpr.o ../../cachedExpr.o
clean:
-rm *.o
hello_world.o : hello_world.c
${CC} ${CFLAGS} hello_world.c

GCC does not throw an error during the compiler stage when a function has not been forward declared

Ok,
I have 3 files in my directory.
main.c
#include <stdio.h>
int main(int a, int b, int c)
{
aprint();
bprint();
}
a.c
#include <stdio.h>
void aprint()
{
printf("hey This is a.c");
}
b.c
#include <stdio.h>
void bprint()
{
printf("This is b.c");
}
I haven't created any header files.
I just compiled using "gcc main.c a.c b.c"
I didn't get any error. I want to know what happened?
Did gcc just assume everything is going to be okay in linking stages and why didn't gcc throw an error during compilation?
Enable warnings using -Wall flag, hten you will see warning: Implicit call to function bprint() and Implicit call to function aprint(). It's is basically compiler recognizes this function during Linker stage and this does not give any error.
C89/90 version of C language does not require functions to be forward declared. C99 version of C language does require functions to be forward declared. Are you compiling your code in C89/90 mode or in C99 mode?
Note that even in C99 mode a genuine error (i.e. a constraint violation) might be reported by the compiler as a mere warning. If you want GCC to become more strict in reporting constraint violations as errors, run it with -pedantic-errors switch.
I brought you your warnings:
notroot#ubuntu:~/qweqwe$ gcc main.c a.c b.c -Wall
main.c:2:5: warning: second argument of ‘main’ should be ‘char **’ [-Wmain]
main.c:2:5: warning: third argument of ‘main’ should probably be ‘char **’ [-Wmain]
main.c: In function ‘main’:
main.c:4:1: warning: implicit declaration of function ‘aprint’ [-Wimplicit-function-declaration]
main.c:5:1: warning: implicit declaration of function ‘bprint’ [-Wimplicit-function-declaration]
main.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]

error: ‘CODEC_TYPE_AUDIO’ undeclared when make m3u8-segmenter

I want to make m3u8-segmenter for Http Live Stream: https://github.com/johnf/m3u8-segmenter
There are errors when I make, the errors are:
gcc -g -O -Wall -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast -Wwrite-strings -Werror m3u8-segmenter.c -o m3u8-segmenter -lavformat -lavcodec -lavutil
m3u8-segmenter.c: In function ‘add_output_stream’:
m3u8-segmenter.c:82:14: error: ‘CODEC_TYPE_AUDIO’ undeclared (first use in this function)
m3u8-segmenter.c:82:14: note: each undeclared identifier is reported only once for each function it appears in
m3u8-segmenter.c:94:14: error: ‘CODEC_TYPE_VIDEO’ undeclared (first use in this function)
m3u8-segmenter.c: In function ‘main’:
m3u8-segmenter.c:338:5: error: ‘av_open_input_file’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1090) [-Werror=deprecated-declarations]
m3u8-segmenter.c:352:5: error: implicit declaration of function ‘guess_format’ [-Werror=implicit-function-declaration]
m3u8-segmenter.c:352:5: error: nested extern declaration of ‘guess_format’ [-Werror=nested-externs]
m3u8-segmenter.c:352:10: error: assignment makes pointer from integer without a cast [-Werror]
m3u8-segmenter.c:371:18: error: ‘CODEC_TYPE_VIDEO’ undeclared (first use in this function)
m3u8-segmenter.c:376:18: error: ‘CODEC_TYPE_AUDIO’ undeclared (first use in this function)
m3u8-segmenter.c:387:5: error: ‘av_set_parameters’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1434) [-Werror=deprecated-declarations]
m3u8-segmenter.c:392:5: error: ‘dump_format’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1559) [-Werror=deprecated-declarations]
m3u8-segmenter.c:406:5: error: ‘url_fopen’ is deprecated (declared at /usr/local/include/libavformat/avio.h:279) [-Werror=deprecated-declarations]
m3u8-segmenter.c:411:5: error: ‘av_write_header’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1492) [-Werror=deprecated-declarations]
m3u8-segmenter.c:444:67: error: ‘PKT_FLAG_KEY’ undeclared (first use in this function)
m3u8-segmenter.c:455:13: error: ‘put_flush_packet’ is deprecated (declared at /usr/local/include/libavformat/avio.h:293) [-Werror=deprecated-declarations]
m3u8-segmenter.c:456:13: error: ‘url_fclose’ is deprecated (declared at /usr/local/include/libavformat/avio.h:280) [-Werror=deprecated-declarations]
m3u8-segmenter.c:476:13: error: ‘url_fopen’ is deprecated (declared at /usr/local/include/libavformat/avio.h:279) [-Werror=deprecated-declarations]
m3u8-segmenter.c:482:13: error: ‘av_write_header’ is deprecated (declared at /usr/local/include/libavformat/avformat.h:1492) [-Werror=deprecated-declarations]
m3u8-segmenter.c:514:5: error: ‘url_fclose’ is deprecated (declared at /usr/local/include/libavformat/avio.h:280) [-Werror=deprecated-declarations]
cc1: all warnings being treated as errors
make: *** [all] Error 1
You're getting those errors because for some reason, this block in libav_compat.h took effect:
/* Support older versions of ffmpeg and libav */
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52, 64, 0)
#define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO
#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO
#define AV_PKT_FLAG_KEY PKT_FLAG_KEY
#endif
But whichever headers are supposed to define CODEC_TYPE_AUDIO and CODEC_TYPE_VIDEO don't. From the comment there, it looks like you probably should update your other software (ffmpeg and/or libav) and then try again.

Resources