gpt4 book ai didi

c - 使文件错误

转载 作者:行者123 更新时间:2023-11-30 16:02:19 26 4
gpt4 key购买 nike

->代表“包含”

列表.c -> 列表.h

矩阵.c -> 矩阵.h

smatrix.c -> smatrix.h

smatrix h文件 -> list.h和matrix.h文件

测试.c -> 测试.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一些东西文件名

如何解决这个问题?

-编辑-我用 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 上工作得很好...如何解决这个问题?

最佳答案

需要添加-c选项让gcc生成目标文件,并添加-o name来命名它。示例:

smatrix.o: smatrix.c smatrix.h
gcc -g -c -o smatrix.o smatrix.c

要解决第二个问题,请将-std=c99开关添加到gcc参数列表中。而且,正如 Evan Mulawski 提到的,您不需要 -o 开关。

smatrix.o: smatrix.c smatrix.h
gcc -g -std=c99 -c smatrix.c

关于c - 使文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com