【发布时间】:2011-03-25 12:35:45
【问题描述】:
-> 表示“包含”
list.c -> list.h
matrix.c -> 矩阵.h
smatrix.c -> smatrix.h
smatrix h 文件 -> list.h 和 matrix.h 文件
test.c -> test.h
test.h -> list.h、matrix.h 和 smatrix.g 文件
现在我有了这个makefile
all: run
run: test.o list.o matrix.o smatrix.o
gcc test.o list.o matrix.o smatrix.o -o matrix-mul
list.o: list.c list.h
gcc -g list.c
matrix.o: matrix.c matrix.h
gcc -g matrix.c
smatrix.o: smatrix.c smatrix.h
gcc -g smatrix.c
test.o: test.c test.h
gcc -g test.c
现在我得到了
Undefined symbols for architecture x86_64:
"_make_matrix", referenced from: //make_matrix defines in matrix.h
_main in cctU8RoB.o
"_print_matrix", referenced from://print_matrix defines in list.h
_main in cctU8RoB.o
"_make_smatrix", referenced from://make_smatrix defines in smatrix.h
_main in cctU8RoB.o
"_multiply_by_vector", referenced from://muliply_by_vector defines in smatrix.h
_main in cctU8RoB.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [test.o] Error 1
我正在调用那些在 test.c 中的其他文件中定义的函数,而 test.h 包括在 test.c 文件中调用的函数的所有头文件。所有头文件都包含 gard something liet filename
我该如何解决这个问题??
-编辑- 我用 gcc -c 而不是 gcc -o 更改了 *o 文件,现在我得到了
matrix.c:33: error: ‘for’ loop initial declaration used outside C99 mode
matrix.c:38: error: ‘for’ loop initial declaration used outside C99 mode
matrix.c:44: error: ‘for’ loop initial declaration used outside C99 mode
matrix.c: In function ‘make_matrix_k’:
matrix.c:58: error: ‘for’ loop initial declaration used outside C99 mode
matrix.c: In function ‘print_matrix’:
matrix.c:73: error: ‘for’ loop initial declaration used outside C99 mode
matrix.c:74: error: ‘for’ loop initial declaration used outside C99 mode
//for loop in matrix.c file
for(size_t i=0; i < height; i++){
//m->data[i] = malloc(sizeof(int)*width);
m->data[i] = calloc(width, sizeof(int));
if(m->data[i] == NULL){
for(size_t j = 0; j < i; j++) free(m->data[j]);
free(m->data);
free(m);
return 0;
}
if(opt == nonzero_matrix_k_off){
for(size_t j = 0; j < width; j++){
m->data[i][j] = 2;
}
}
}
在 xcode4 上运行良好...如何解决这个问题?
【问题讨论】:
-
对于 *.o 文件,您需要使用
gcc -c -g ...。 -
如果您尝试手动运行 makefile 中的命令会发生什么?第一个错误发生在哪里?你到底输入了什么,抛出了什么错误?
标签: c