对函数的未定义引用(gcc 链接问题)

问题描述 投票:0回答:1

我在编译和链接这些文件时遇到问题:

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 include
1个回答
1
投票

C 中的静态函数是仅限于定义它们的同一文件中的函数

© www.soinside.com 2019 - 2024. All rights reserved.