我试图访问主文件中的程序数组。它在头文件中声明,并在名为fileReader的单独模块中初始化。我收到的错误信息是
架构x86_64的未定义符号: " _programs",引自: _main in test-0bf1e8.o ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
的main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"
#include "fileReader.c"
int main() {
readPrograms();
for (int i=0; i<4; i++) {
printf("%s", programs[i]);
}
return 0;
}
fileReader.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "header.h"
int readPrograms() {
int i=0;
int numProgs=0;
char* programs[50];
char line[50];
FILE *file;
file = fopen("files.txt", "r");
while(fgets(line, sizeof(line), file)!=NULL) {
//add each filename into array of programs
programs[i]=strdup(line);
i++;
}
fclose(file);
return 0;
}
header.h
extern char* programs[];
提前致谢
答案 0 :(得分:0)
您不应该包含来自其他C文件的C文件,只包含头文件。
以下是您需要解决的问题:
readPrograms
函数的原型添加到header.h
#include "fileReader.c"
programs
数组的定义添加到您的一个C文件中(例如,main.c)。programs
readPrograms
的声明
您在main.c中放置的programs
的定义应如下所示:
char* programs[50];
您可以在main()
功能之前或之后添加。