Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux中的链接-寻找解释_C_Linux_Compilation_Linker_Codeblocks - Fatal编程技术网

C Linux中的链接-寻找解释

C 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.

如果有人能向我解释编译的整个过程和链接器的功能(所有这些“编程后台工作”),这可能会​​让我了解整个计划。那就太好了

错误为“未定义对菜单()的引用”

我在Linux上,使用代码块在C中编程。所有文件都在同一个文件夹中

我现在有3个文件:

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.图书馆

#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它给了我同样的“未定义的引用”出现在代码块上的问题。所以我不知道如何解决这个问题哦!现在我知道你在那里做了什么。它编译的很好。但现在我想知道为什么会发生这种情况,为什么我的代码没有。如果你不介意,或者其他人,我希望得到一些详细的解释或链接,以了解喜欢的人是什么,做什么,以及为什么我的程序不起作用。谢谢还是现在