gpt4 book ai didi

c - 尝试使用重新定义函数名称的 header 构建程序时出现“未定义的函数引用”

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:43 25 4
gpt4 key购买 nike

我遇到了与提出此问题的人完全相同的问题:How to hide the exported symbols name within a shared library

我决定按照 Alexander 给出的说明进行操作(第 3 个答案),但是在将生成的 header 包含到我的 C 主程序中之后,我收到错误未定义函数引用

头.h

#define SecretFunc1 abab

应用.c

#include <stdio.h>
#include "head.h"

int main(){
SecretFunc1();
return 0;
}

libdyn.c

#include <stdio.h>
int SecretFunc1(){
return 2
}

我已将动态库构建到 .so 中文件,然后在尝试使用以下方法构建应用程序之后: gcc app.c -L<path> -ldyn -o sample在函数 main 中未定义对 abab 的引用

我真的不知道该怎么办。

最佳答案

(部分)预处理后,您的 application.c 将如下所示:

#include <stdio.h>

int main(){
abab();
return 0;
}

首先,这应该给您一个警告,abab 是隐式声明的,这通常不是一个好主意。您应该声明函数(在 application.clibdyn.c 共享的头文件中):

int SecretFunc1(void);

当编译成目标文件时,这个目标文件将引用符号abab

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

您需要在所有使用它的文件中重命名该函数,例如通过在 libdyn.c 中包含 head.h 或者更好地将重命名宏和声明放在包含的 libdyn.h 中在 libdyn.capplication.c 中。

关于c - 尝试使用重新定义函数名称的 header 构建程序时出现“未定义的函数引用”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57688048/

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