Advertisements
I am having problems compiling and linking these files:
MCP23017.h:
#ifndef MCP23017_H_
#define MCP23017_H_
#include <stdint.h>
// Declare functions
static int mcp23017_set_dir(int iic, uint8_t addr, uint8_t a, uint8_t b);
static int mcp23017_write(int iic, uint8_t addr, uint8_t a, uint8_t b);
static int mcp23017_write_a(int iic, uint8_t addr, uint8_t a);
static int mcp23017_write_b(int iic, uint8_t addr, uint8_t b);
#endif
MCP23017.c:
#include "MCP23017.h"
static int mcp23017_set_dir(int iic, uint8_t addr, uint8_t a, uint8_t b)
{
return 0;
}
static int mcp23017_write(int iic, uint8_t addr, uint8_t a, uint8_t b)
{
return 0;
}
static int mcp23017_write_a(int iic, uint8_t addr, uint8_t a)
{
return 0;
}
static int mcp23017_write_b(int iic, uint8_t addr, uint8_t b)
{
return 0;
}
and ICflash.c:
#include "MCP23017.h"
int main(int argc, char* argv[])
{
mcp23017_set_dir(iic, I2C_EX1, IO_DIR_BUS_AD_OUT, IO_DIR_BUS_AD_OUT);
mcp23017_set_dir(iic, I2C_EX2, IO_DIR_BUS_AD_OUT, IO_DIR_BUS_AD_OUT);
mcp23017_write(iic, I2C_EX1, 0x00, 0x00);
mcp23017_write(iic, I2C_EX2, 0x00, 0x00);
}
I get this errors:
gcc MCP23017.c ICflash.c -o ICflash
In file included from ICflash.c:25:
MCP23017.h:28:12: warning: ‘mcp23017_set_dir’ used but never defined
28 | static int mcp23017_set_dir(int iic, uint8_t addr, uint8_t a, uint8_t b);
| ^~~~~~~~~~~~~~~~
MCP23017.h:30:12: warning: ‘mcp23017_write’ used but never defined
30 | static int mcp23017_write(int iic, uint8_t addr, uint8_t a, uint8_t b);
| ^~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccfa811I.o: in function `main':
ICflash.c:(.text+0xec): undefined reference to `mcp23017_set_dir'
/usr/bin/ld: ICflash.c:(.text+0x100): undefined reference to `mcp23017_set_dir'
/usr/bin/ld: ICflash.c:(.text+0x114): undefined reference to `mcp23017_write'
/usr/bin/ld: ICflash.c:(.text+0x128): undefined reference to `mcp23017_write'
collect2: error: ld returned 1 exit status
I have removed a lot of the code. This is just an example.
If i put it all in the "main.c" i compiles fine.
i have also tried to compile both .c files first and then link it. .. same result :/
where did i miss something ?
regards!
>Solution :
Static functions in C are functions that are restricted to the same file in which they are defined