gpt4 book ai didi

使用 Glib 库在 Windows 上成功构建的 C 代码在 Linux 上出现编译器/链接器错误

转载 作者:行者123 更新时间:2023-11-30 16:07:19 26 4
gpt4 key购买 nike

我有一个使用 Glib 库来创建新类型的代码。现在代码如下:

.h文件:

G_DECLARE_DERIVABLE_TYPE(NewTypeState, new_type_state, NEW, TYPE_STATE, ParentType)

.c文件:

G_DEFINE_TYPE_WITH_PRIVATE(NewTypeState, new_type_state, NEW_TYPE_STATE)

现在按照glib doc对于对象创建,我们必须定义两个静态函数:

static new_type_init()

static new_type_class_init()

但是在代码中没有定义 static new_type_init() 函数。声明为:

__declspec(dllexport) extern void new_type_init()

定义为:

void new_type_init()
{}

代码在 Windows 上成功编译和链接,但在尝试在 Linux 上构建时,我删除了 __declspec(dllexport)但我开始收到错误:

static declaration follows non-static declaration

现在我注释掉了 .h 文件中的声明,并且 .c 文件中只有非静态定义,但在尝试构建它时出现链接器错误:

undefined reference new_type_init

我什至将 extern 添加到定义中,但错误仍然存​​在。

有人可以解释一下上述行为吗?

编辑:

o/p objdump -t <file-name> | grep -i <symbol-name>是:

000000000000b440 l     F .text  0000000000000023              symbol-name
0000000000000000 *UND* 0000000000000000 symbol-name

最佳答案

Extern 表示该函数稍后可用(即在此翻译单元中未定义)。静态强制该功能在外部不可用。将 extern 添加到 header 的声明中并从定义中删除 static ,您可能会取得一些成功。话虽这么说,我不了解 Glib,所以不能确定。

关于使用 Glib 库在 Windows 上成功构建的 C 代码在 Linux 上出现编译器/链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59682757/

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