【问题标题】:Undefined Reference to ' '未定义的引用 ' '
【发布时间】:2012-06-29 15:31:04
【问题描述】:

我有一个 rpcgen 生成的文件 'api_svc1.c' 该文件包含以下行:

local = (char *(*)(char *, struct svc_req *)) createacct_5_svc;

'createacct_5_sv' 在 'api.h' 中声明为

createAcctResult * createacct_5_svc();

但即使在包含头文件 'api.h' 之后,我也会收到以下错误:

api_svc1.c:90: undefined reference to `createacct_5_svc'

有什么建议吗?

【问题讨论】:

    标签: linux rpc undefined-reference


    【解决方案1】:

    我怀疑如果您有“api.h”,那么您也有“api.c”,在这种情况下,您必须将您的 api.c 文件链接到 ap_svc1.c。请注意,该错误不是抱怨缺少标头的编译器错误;这是一个链接器错误,在链接阶段编译为目标代码后抱怨找不到(无法解析)符号。

    【讨论】:

    • 嗨 H2CO3,我们这里没有 api.c。 rpcgen 实用程序生成 api 服务器存根文件、api 客户端存根文件和 api 标头 (api.h)。
    • 您必须有一个 .c 文件,其中包含该功能。您可以使用grep utiliy 在 .c 文件中搜索其名称,然后使用您的编译器链接它。
    • 那么该函数的实现在哪里呢? api.h 只包含原型,实现必须在某个 .c 文件中,通常是 api.c。如果您没有它,那么您将无法链接到该功能。
    • 函数定义存在于 rpcgen 生成的 api 客户端存根文件中。这是一个 C 文件。
    • 然后链接到该文件以及您有错误的文件,这应该没问题。
    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2011-10-26
    • 2014-03-03
    • 2016-03-18
    • 2011-07-11
    相关资源
    最近更新 更多