对“memcached_exist”的未定义引用

Posted

技术标签:

【中文标题】对“memcached_exist”的未定义引用【英文标题】:undefined reference to `memcached_exist' 【发布时间】:2015-07-17 18:43:42 【问题描述】:

我使用的是 C 而不是 C++

我正在尝试在 C 中使用 memcached_exist,但出现此错误:

undefined reference to `memcached_exist'

这是我的代码:

  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  #include <libmemcached/memcached.h>


  int main(int argc, char *argv[])  

   memcached_server_st *servers = NULL;
    memcached_st *memc;
    memcached_return rc;
    char *key= "keystring";
    char *value= "keyvalue";

  //  memcached_server_st *memcached_servers_pars (char *server_strings);
    memc= memcached_create(NULL);

    servers= memcached_server_list_append(servers, "localhost", 11211, &rc);
    rc= memcached_server_push(memc, servers);
rc= memcached_set(memc, key, strlen(key), value, strlen(value), expire, flag);                                                                           
  rc = memcached_exist(memc, key, strlen(key));

我正在编译:-lmemcached -lmemcachedutil

由于我使用的是 C,因此此解决方案不起作用:

ibmemcached Linking Error: undefined reference to `memcached_exist'

【问题讨论】:

仔细阅读问题中的最后两个代码 sn-ps 并查看青色突出显示的文本。 @Olaf 对不起,我是色盲...什么突出显示的文字? @Olaf 无论如何我的意思是为什么我得到一个“未定义的引用”......文件在 /usr/include/libmemcached-1.0/ 我知道这不是你问的,但你定义的函数memcached_exist() 是否打算无限递归(直到堆栈中断)?回到主题,请提供一个完整的示例,仅因为一个问题而无法编译。 @WeatherVane 更新问题 【参考方案1】:

请注意,为了提供简明扼要的答案,我需要一个mcve,包括您用于编译的完整命令,因为这需要在基本编译之外进行一些额外的切换.然而,这个问题有一个确凿的答案......顺便说一句,你已经给我们了,但我们稍后会谈到。首先,让我们介绍更常见的原因。

这是一个链接器错误。链接器错误通常属于以下三类之一:

在编译/链接阶段缺少库。 The documentation 表示您已链接到正确的库。 链接顺序! 在这种情况下,-lmemcached -lmemcachedutil 的位置很重要。如果您的命令与cc -lmemcached file.c 一致,这是您的(至少部分)错误。它需要看起来更像:cc file.c -lmemcached... 印刷错误。基于the documentation,尽管您链接到问题,最初看起来这不是您的情况。但是,如果您更仔细地检查链接到的问题,那么您会注意到也没有使用 C++!也许您的问题 是该问题的副本,当然除了您没有提供 与该问题一样多的信息。快速搜索the source code 表明this function (memcached_exist) 是从名为exist.cc 的文件中编译的,使用...您猜对了:C++ 编译器。因此,考虑到 发生的名称修改(特别是因为实际函数不是使用 extern "C" 定义的),无论您是否愿意接受,都会出现印刷错误。您是否使用您链接到的问题中的命令 (nm libmemcached.so | grep -i memcached_exist) 观察到名称修改的存在(或缺失)?如果您可以看到名称损坏,也许您应该try the answer to the question you linked to, anyway...

【讨论】:

不正确的库不好,我得到了 1.0.18 并且它工作了谢谢

以上是关于对“memcached_exist”的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

对结构方法的未定义引用[重复]

对静态成员的未定义引用

对现有类的未定义引用

键入对 `cv::fastFree(void*)' 的未定义引用

对“cvCreateBGCodeBookModel”的未定义引用

对函数 Android NDK 的未定义引用