【问题标题】:undefined reference to `memcached_exist'对“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 更新问题

标签: c memcached exists


【解决方案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 并且它工作了谢谢
猜你喜欢
  • 2013-05-16
  • 2011-03-27
  • 2022-01-22
  • 2016-04-04
  • 2015-11-03
  • 2011-08-11
  • 2019-07-22
  • 2015-07-20
  • 2019-06-22
相关资源
最近更新 更多