我在编译和链接这些文件时遇到问题:
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;
}
和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);
}
我收到此错误:
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
我删除了很多代码。这只是一个例子。 如果我把它全部放在“main.c”中,我编译得很好。
我还尝试先编译两个 .c 文件,然后链接它。 ..相同的结果:/
我在哪里错过了什么?
问候!
C 中的静态函数是仅限于定义它们的同一文件中的函数