Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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 ';未定义对函数的引用';当试图构建一个具有重新定义函数名的头的程序时_C_Function_Elf - Fatal编程技术网

C ';未定义对函数的引用';当试图构建一个具有重新定义函数名的头的程序时

C ';未定义对函数的引用';当试图构建一个具有重新定义函数名的头的程序时,c,function,elf,C,Function,Elf,我的问题和问这个问题的人完全一样: 我决定按照Alexander给出的说明(第三个答案)进行操作,但在将生成的头文件包含到C语言的主程序中后,我得到了对函数的错误未定义引用 头 #定义SecretFunc1 abab 应用程序.c #包括 #包括“head.h” int main(){ 分泌功能1(); 返回0; } libdyn.c #包括 int SecretFunc1(){ 返回2 } 我已将动态库构建到。so文件中,然后尝试使用以下内容构建应用程序: gcc app.c-L-ldy

我的问题和问这个问题的人完全一样:

我决定按照Alexander给出的说明(第三个答案)进行操作,但在将生成的头文件包含到C语言的主程序中后,我得到了对函数的错误未定义引用

#定义SecretFunc1 abab
应用程序.c

#包括
#包括“head.h”
int main(){
分泌功能1();
返回0;
}
libdyn.c

#包括
int SecretFunc1(){
返回2
}
我已将动态库构建到
。so
文件中,然后尝试使用以下内容构建应用程序:
gcc app.c-L-ldyn-o示例
函数中未定义对abab的引用

我真的不知道该怎么办。

在(部分)预处理之后,您的
应用程序.c
将如下所示:

#include <stdio.h>

int main(){
    abab();
    return 0;   
}
编译到对象文件时,此对象文件将引用符号
abab

libdyn.c
编译到目标文件后,它将提供一个名为
SecretFunc1
的符号。因此,链接器不会将其与
application.o
中的引用
abab
匹配


您需要在使用该函数的所有文件中重命名该函数,例如,将
head.h
包含在
libdyn.c
中,或者更好地将重命名宏和声明都放在
libdyn.h
中,如果您想“混淆”的话,该宏和声明都包含在
libdyn.c
application.c
中符号名称如该答案所示,您还需要在
libdyn.c
中包含
heah.h
,否则
application.c
需要名为
abab
的函数,而
libdyn.c
将其作为
SecretFunc1
提供。但我不明白这有什么意义。你能澄清一下吗?编译器还应该警告您,
abab
是在
application.c
中隐式声明的。你应该提供一个明确的声明。这是为了我的锻炼。我需要更改一个特定的库符号名称,以便在阅读elf表后,您无法知道它们的作用。不清楚您的练习要求您具体实现什么。特别是,不清楚您得到了什么以及您应该提交什么作为解决方案。在实施中也包括
“head.h”
。。。。如果您不这样做,您实际上是在实现
SecretFunction
,而不是
abab
实现具有加扰名称的共享对象是一个项目崩溃的赌注。成功了,非常感谢您的帮助。现在我明白是怎么回事了。
int SecretFunc1(void);