0
我是一個可以在C
編程的總計noob。我花了一些代碼,當我運行make拋出這個錯誤:連接C代碼失敗
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;
}
之前寫它說的'rp_osc_adc_sign'功能不被任何定義
inline
標籤。可能它在您忘記在makefile中列出的另一個文件中定義。 –我看不到您的make文件中的C文件的編譯,只鏈接目標文件。也許嘿沒有更新?此外,鏈接器抱怨'rp_osc_meas_min_max'內的函數'_rp_osc_adc_sign'。它是否實施? – MByD
@MByD Makefiles具有[隱式規則](https://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html)。包括從'.c'文件構建'.o'。 – kaylum