C Linux中的链接-寻找解释
如果有人能向我解释编译的整个过程和链接器的功能(所有这些“编程后台工作”),这可能会让我了解整个计划。那就太好了 错误为“未定义对菜单()的引用” 我在Linux上,使用代码块在C中编程。所有文件都在同一个文件夹中 我现在有3个文件: maintest.cC Linux中的链接-寻找解释,c,linux,compilation,linker,codeblocks,C,Linux,Compilation,Linker,Codeblocks,如果有人能向我解释编译的整个过程和链接器的功能(所有这些“编程后台工作”),这可能会让我了解整个计划。那就太好了 错误为“未定义对菜单()的引用” 我在Linux上,使用代码块在C中编程。所有文件都在同一个文件夹中 我现在有3个文件: maintest.c #include <stdio.h> #include "biblioteca.h" int main() { menu(2, "opçao 1", "opçao 2"); } #include <stdio.
#include <stdio.h>
#include "biblioteca.h"
int main() {
menu(2, "opçao 1", "opçao 2");
}
#include <stdio.h>
#include "biblioteca.h"
int main() {
menu(2, "opç 1", "opç 2");
}
c.图书馆
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include "biblioteca.h"
void menu(int count, ...) {
va_list listPointer;
va_start(listPointer, count);
for(int i = 1; i <= count; i++) {
char *string = va_arg(listPointer, char*);
line(1, 1);;
printf("%d ..... %s", i < count ? i : 0 , string);
}
va_end(listPointer);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
void menu(int count, ...) {
int i;
va_list listPointer;
va_start(listPointer, count);
for( i = 1; i <= count; i++) {
char *string = va_arg(listPointer, char*);
// line(1, 1);
printf("%d ..... %s", i < count ? i : 0 , string);
}
va_end(listPointer);
}
#包括
#包括
#包括
#包括
#包括“biblioteca.h”
无效菜单(整数计数,…){
列表指针;
va_开始(列表指针、计数);
对于(int i=1;i错误为“未定义对菜单的引用()”,可能是IDE链接器问题,或者您可能无法正确链接
在第二个文件stdlib.h
中有一个问题,它包含了sys/types.h
随需应变,此头文件包含此类型定义
typedef unsigned int uint;
在你的头文件中也有同样的东西
因此,您将得到一个冲突类型的错误
可以通过在第二个文件中删除头文件的包含来避免这种情况,或者您可以删除包含stdlib.h(不建议这样做)
如果您使用Linux.please和GCC.use-Wall选项一起尝试此操作,以检查是否存在任何警告。故意注释行(1,1);因为GCC中对行的引用不明确。请确保您的三个文件位于编译代码的同一目录中。否则,您需要给出文件的绝对路径
gcc -Wall maintest.c biblioteca.c -o result
./result
maintest.c
#include <stdio.h>
#include "biblioteca.h"
int main() {
menu(2, "opçao 1", "opçao 2");
}
#include <stdio.h>
#include "biblioteca.h"
int main() {
menu(2, "opç 1", "opç 2");
}
除非您告诉文件,否则文件不会“相互链接”(默认情况下,只有标准C和Unix库链接到)。请显示你用来编译和链接程序的命令。你用什么命令行编译程序?链接步骤中是否包含biblioteca.c
?我刚刚创建了3个文件,即你看到的文件,然后构建/编译/运行。我以前在windows上这样做,这不是问题。这就是为什么我问你可以给我解释或者给我一些链接,因为我是初学者,我可以不用简单地解释这个问题。我不使用终端来编译,但是我正在学习Linux。但是我很欣赏你的注意,你是否可能在C++模式中编译任何东西?这可能发生,例如,如果文件名以“.c”结尾(Capital C)我不是一个Code::Blocks用户,但我确信我以前看到过它的问题,因为nneonneo的观点——不是因为文件名,只是因为IDE是如何配置的。呃,什么?他使用的是IDE,不是命令行;他遇到的是链接器错误,不是编译器错误;不幸的是,你的答案是rather写得很差。biblioteca.h
带有“标题保护”,因此多重包含不可能是一个问题。在我看来,不将模块标题包含到模块本身似乎有点可疑。最后是“未定义的引用…”。。。“肯定是链接器错误。@NNONNEO您的问题是什么。值得尝试从命令行编译和链接。如果它有效,您至少可以确定IDE中存在一些错误配置。您好,谢谢您的帮助。我尝试了命令行。您给我的终端编译说明导致了“什么都没有发生”但是当我这样做的时候:gcc-Wall-o maintest.c biblioteca.c-std=c99它给了我同样的“未定义的引用”出现在代码块上的问题。所以我不知道如何解决这个问题哦!现在我知道你在那里做了什么。它编译的很好。但现在我想知道为什么会发生这种情况,为什么我的代码没有。如果你不介意,或者其他人,我希望得到一些详细的解释或链接,以了解喜欢的人是什么,做什么,以及为什么我的程序不起作用。谢谢还是现在