对“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*)' 的未定义引用