c - 链接 C 代码失败

标签 c macos compilation linker

我是一个 C 编程菜鸟。我使用了一些在运行 make 时引发此错误的代码:

Undefined symbols for architecture x86_64:
  "_rp_osc_adc_sign", referenced from:
      _rp_osc_meas_min_max in worker.o
      _meas_period in worker.o
  "_rp_osc_meas_cnv_cnt", referenced from:
      _rp_osc_meas_convert in worker.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [make_c_app] Error

我使用的是 OS X Yosemite,这是 make 文件

CC=$(CROSS_COMPILE)gcc
RM=rm

OBJECTS=main.o fpga.o worker.o calib.o fpga_awg.o generate.o fpga_pid.o pid.o

INCLUDE=

#CFLAGS=$(CFLAGS) -Wall -Werror -g
CFLAGS+= -Wall -Werror -g -fPIC $(INCLUDE)
LDFLAGS=-shared


OUT_DIR=../
C_OUT_NAME=$(OUT_DIR)controller.so

all: make_c_app
clean: clean_c_app

make_c_app: $(OBJECTS)
    $(CC) -o $(C_OUT_NAME) $(OBJECTS) $(CFLAGS) $(LDFLAGS)

clean_c_app:
    $(RM) -f $(C_OUT_NAME) $(OBJECTS)

以及链接器提示的方法

int rp_osc_meas_min_max(rp_osc_meas_res_t *ch_meas, int sig_data)
{
    int s_data = rp_osc_adc_sign(sig_data);

    if(ch_meas->min > s_data)
        ch_meas->min = s_data;
    if(ch_meas->max < s_data)
        ch_meas->max = s_data;

    ch_meas->avg += s_data;

    return 0;
}

错误可能来自哪里?

编辑:rp_osc_adc_sign 按以下方式定义

inline int rp_osc_adc_sign(int in_data)
{
    int s_data = in_data;
    if(s_data & (1<<(c_osc_fpga_adc_bits-1)))
        s_data = -1 * ((s_data ^ ((1<<c_osc_fpga_adc_bits)-1)) + 1);
    return s_data;
}

最佳答案

您应该删除函数之前编写的inline标签

rp_osc_adc_sign(int in_data)

rp_osc_meas_cnv_cnt

关于c - 链接 C 代码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32896498/

相关文章:

android - 在 Mac 上找不到 Genymotion 虚拟化引擎/插件加载中止

macos - Mac OS X 中的文件级文件系统更改通知

c++ - 是否有支持 g++ 或 clang 内存驻留编译的实用程序?

c++ - g++ 创建进程 : no such file or directory

创建一个带有数字的有序单链表

c - Ruby C API - 如何删除类方法(特别是新方法)?

debugging - bash 的图形化调试器

C 程序在编译和链接后生成包含 edata 部分的 EXE 文件?

c - fseek/ftell 和 stat.st_size 在文本模式下不返回实际文件大小

c - 测量多线程 C 程序的加速(使用 Pthreads 实现)