c++ - ibmemcached Linking Error: undefined reference to `memcached_exist' -


i trying write sample code using libmemcached c/c++ client version (0.53)

gcc -o test test.c -i/home/libmemcached/include -l/home/libmemcached/lib -lmemcached -lmemcachedutil 

however error

/tmp/ccoatoyp.o: in function main': test.c:(.text+0x255): undefined reference tomemcached_exist'

has come across issue ? cannot use version higher 0.53 (basically 1.0) due limitation installed gcc. see command added 0.53.

also, path , ld_library_path straightforward too. path set /bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/x11:/usr/sbin. ld_library_path set /home/libmemcached/lib:/usr/lib:/usr/lib64:/lib

$ nm libmemcached.so | grep -i memcached_exist 00014bc2 t _z15memcached_existp12memcached_stpkcj 00014b06 t _z22memcached_exist_by_keyp12memcached_stpkcjs2_j $

if comment out memcached_exist call, rest of code compiles , executes fine.

#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";    uint32_t flags;   char return_key[memcached_max_key];   size_t return_key_length;   char *return_value;   size_t return_value_length;    memc= memcached_create(null);    servers= memcached_server_list_append(servers, "localhost", 11211, &rc);   rc= memcached_server_push(memc, servers);    if (rc == memcached_success)     fprintf(stderr,"added server successfully\n");   else     fprintf(stderr,"couldn't add server: %s\n",memcached_strerror(memc, rc));    rc= memcached_set(memc, key, strlen(key), value, strlen(value), (time_t)0, (uint32_t)0);    if (rc == memcached_success)     fprintf(stderr,"key stored successfully\n");   else     fprintf(stderr,"couldn't store key: %s\n",memcached_strerror(memc, rc));    return_value= memcached_get(memc, key, strlen(key), &return_value_length, &flags, &rc);   if (rc == memcached_success)             {               fprintf(stderr,"key %s returned %s\n",key, return_value);             }   rc = memcached_exist(memc, key, strlen(key));   fprintf(stderr," error code: %s\n",memcached_strerror(memc, rc));    return 0; } 

thanks antony

if don't want compile c++, can call mangled name directly. if want code reusable , able upgrade libraries easily, etc, shouldn't that. more extensible solution, i'll add h2co3's answer.

if want reason keep main source compiled c, can create .cpp file has stubs call c++ library functions. example:

// libraries.cpp // // (includes needed memcached lib call , types) extern "c" memcached_return memcached_exist(memcached_st *memc, char *key, size_t len) {     return memcached_exist(memc, key, len); } 

then can compile libraries.cpp , link against memcached libs using g++ libraries.o , link against on gcc line.


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -