xmlrpc in C Server Beispiel geht nicht

ascawath

Mitglied
Moin moin,

ich habe versucht mittels C einen xmlrpc Server "aufzusetzen". Dazu habe ich den BeispielCode aus der Dokumentation genommen:
PHP:
#include <xmlrpc.h>
#include <xmlrpc_server.h>
#include <xmlrpc_server_abyss.h>

static xmlrpc_value *
sample_add(xmlrpc_env *   const envP,
           xmlrpc_value * const paramArrayP,
           void *         const serverContext) {

    xmlrpc_int32 x, y, z;

    /* Parse our argument array. */
    xmlrpc_parse_value(envP, paramArrayP, "(ii)", &x, &y);
    if (envP->fault_occurred)
        return NULL;

    /* Add our two numbers. */
    z = x + y;

    /* Return our result. */
    return xmlrpc_build_value(envP, "i", z);
}



int
main (int           const argc,
      const char ** const argv) {

    xmlrpc_server_abyss_parms serverparm;
    xmlrpc_registry * registryP;
    xmlrpc_env env;

    xmlrpc_env_init(&env);

    registryP = xmlrpc_registry_new(&env);

    xmlrpc_registry_add_method(
        &env, registryP, NULL, "sample.add", &sample_add, NULL);

    serverparm.config_file_name = argv[1];
    serverparm.registryP = registryP;

    printf("Starting XML-RPC server...\n");

    xmlrpc_server_abyss(&env, &serverparm, XMLRPC_APSIZE(registryP));

    return 0;
}

Allerdings bekomme ich beim Kompilieren immer Fehlermeldungen:
Code:
xmlrpc.c:(.text+0x3a): Nicht definierter Verweis auf `xmlrpc_parse_value'
xmlrpc.c:(.text+0x6b): Nicht definierter Verweis auf `xmlrpc_build_value'
/home/roboter/Roboter/xmlrpc.o: In Funktion `main':
xmlrpc.c:(.text+0xb4): Nicht definierter Verweis auf `xmlrpc_env_init'
xmlrpc.c:(.text+0xc3): Nicht definierter Verweis auf `xmlrpc_registry_new'
xmlrpc.c:(.text+0xe6): Nicht definierter Verweis auf `xmlrpc_registry_add_method'
xmlrpc.c:(.text+0x11a): Nicht definierter Verweis auf `xmlrpc_server_abyss'
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
6 error(s), 2 warning(s) (0 minute(s), 1 second(s))

Habt ihr vielleicht eine Idee, woran das liegen könnte?

Ich benutze Linux Ubuntu 15.10 und CodeBlocks als IDE.

MfG Ascawath
 
Zuletzt bearbeitet:
Wenn du reines C verwendest, und kein C++, ist der Parameter c++2 nicht notwendig.

Allerdings ist es interessant, dass der Linker die Verweise dennoch nicht auflösen kann. Kannst du mal die Ausgabe von

Bash:
ls -l /usr/local/lib/libxmlrpc*

posten?
 
Hi,

PHP:
-rw-r--r-- 1 root root  581798 Nov 16 21:24 /usr/local/lib/libxmlrpc.a
-rw-r--r-- 1 root root 1378130 Nov 16 21:25 /usr/local/lib/libxmlrpc++.a
-rw-r--r-- 1 root root  456100 Nov 16 21:24 /usr/local/lib/libxmlrpc_abyss.a
lrwxrwxrwx 1 root root      20 Nov 16 21:24 /usr/local/lib/libxmlrpc_abyss.so -> libxmlrpc_abyss.so.3
lrwxrwxrwx 1 root root      23 Nov 16 21:24 /usr/local/lib/libxmlrpc_abyss.so.3 -> libxmlrpc_abyss.so.3.33
-rwxr-xr-x 1 root root  317332 Nov 16 21:24 /usr/local/lib/libxmlrpc_abyss.so.3.33
-rw-r--r-- 1 root root  104306 Nov 16 21:25 /usr/local/lib/libxmlrpc_cpp.a
lrwxrwxrwx 1 root root      18 Nov 16 21:25 /usr/local/lib/libxmlrpc_cpp.so -> libxmlrpc_cpp.so.8
lrwxrwxrwx 1 root root      21 Nov 16 21:25 /usr/local/lib/libxmlrpc_cpp.so.8 -> libxmlrpc_cpp.so.8.33
-rwxr-xr-x 1 root root   99020 Nov 16 21:25 /usr/local/lib/libxmlrpc_cpp.so.8.33
-rw-r--r-- 1 root root  186060 Nov 16 21:25 /usr/local/lib/libxmlrpc_packetsocket.a
lrwxrwxrwx 1 root root      27 Nov 16 21:25 /usr/local/lib/libxmlrpc_packetsocket.so -> libxmlrpc_packetsocket.so.8
lrwxrwxrwx 1 root root      30 Nov 16 21:25 /usr/local/lib/libxmlrpc_packetsocket.so.8 -> libxmlrpc_packetsocket.so.8.33
-rwxr-xr-x 1 root root  155720 Nov 16 21:25 /usr/local/lib/libxmlrpc_packetsocket.so.8.33
-rw-r--r-- 1 root root   84968 Nov 16 21:24 /usr/local/lib/libxmlrpc_server.a
-rw-r--r-- 1 root root  242586 Nov 16 21:25 /usr/local/lib/libxmlrpc_server++.a
-rw-r--r-- 1 root root  118704 Nov 16 21:24 /usr/local/lib/libxmlrpc_server_abyss.a
-rw-r--r-- 1 root root  125766 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss++.a
lrwxrwxrwx 1 root root      27 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss.so -> libxmlrpc_server_abyss.so.3
lrwxrwxrwx 1 root root      29 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss++.so -> libxmlrpc_server_abyss++.so.8
lrwxrwxrwx 1 root root      30 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss.so.3 -> libxmlrpc_server_abyss.so.3.33
-rwxr-xr-x 1 root root   74976 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss.so.3.33
lrwxrwxrwx 1 root root      32 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss++.so.8 -> libxmlrpc_server_abyss++.so.8.33
-rwxr-xr-x 1 root root  119008 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_abyss++.so.8.33
-rw-r--r-- 1 root root   21182 Nov 16 21:24 /usr/local/lib/libxmlrpc_server_cgi.a
-rw-r--r-- 1 root root   90896 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi++.a
lrwxrwxrwx 1 root root      25 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi.so -> libxmlrpc_server_cgi.so.3
lrwxrwxrwx 1 root root      27 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi++.so -> libxmlrpc_server_cgi++.so.8
lrwxrwxrwx 1 root root      28 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi.so.3 -> libxmlrpc_server_cgi.so.3.33
-rwxr-xr-x 1 root root   23376 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi.so.3.33
lrwxrwxrwx 1 root root      30 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi++.so.8 -> libxmlrpc_server_cgi++.so.8.33
-rwxr-xr-x 1 root root   86788 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_cgi++.so.8.33
-rw-r--r-- 1 root root  158688 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_pstream++.a
lrwxrwxrwx 1 root root      31 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_pstream++.so -> libxmlrpc_server_pstream++.so.8
lrwxrwxrwx 1 root root      34 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_pstream++.so.8 -> libxmlrpc_server_pstream++.so.8.33
-rwxr-xr-x 1 root root  121912 Nov 16 21:25 /usr/local/lib/libxmlrpc_server_pstream++.so.8.33
lrwxrwxrwx 1 root root      21 Nov 16 21:24 /usr/local/lib/libxmlrpc_server.so -> libxmlrpc_server.so.3
lrwxrwxrwx 1 root root      23 Nov 16 21:25 /usr/local/lib/libxmlrpc_server++.so -> libxmlrpc_server++.so.8
lrwxrwxrwx 1 root root      24 Nov 16 21:24 /usr/local/lib/libxmlrpc_server.so.3 -> libxmlrpc_server.so.3.33
-rwxr-xr-x 1 root root   66276 Nov 16 21:24 /usr/local/lib/libxmlrpc_server.so.3.33
lrwxrwxrwx 1 root root      26 Nov 16 21:25 /usr/local/lib/libxmlrpc_server++.so.8 -> libxmlrpc_server++.so.8.33
-rwxr-xr-x 1 root root  211680 Nov 16 21:25 /usr/local/lib/libxmlrpc_server++.so.8.33
lrwxrwxrwx 1 root root      14 Nov 16 21:24 /usr/local/lib/libxmlrpc.so -> libxmlrpc.so.3
lrwxrwxrwx 1 root root      16 Nov 16 21:25 /usr/local/lib/libxmlrpc++.so -> libxmlrpc++.so.8
lrwxrwxrwx 1 root root      17 Nov 16 21:24 /usr/local/lib/libxmlrpc.so.3 -> libxmlrpc.so.3.33
-rwxr-xr-x 1 root root  376860 Nov 16 21:24 /usr/local/lib/libxmlrpc.so.3.33
lrwxrwxrwx 1 root root      19 Nov 16 21:25 /usr/local/lib/libxmlrpc++.so.8 -> libxmlrpc++.so.8.33
-rwxr-xr-x 1 root root  704332 Nov 16 21:25 /usr/local/lib/libxmlrpc++.so.8.33
-rw-r--r-- 1 root root   96726 Nov 16 21:24 /usr/local/lib/libxmlrpc_util.a
lrwxrwxrwx 1 root root      19 Nov 16 21:24 /usr/local/lib/libxmlrpc_util.so -> libxmlrpc_util.so.3
lrwxrwxrwx 1 root root      22 Nov 16 21:24 /usr/local/lib/libxmlrpc_util.so.3 -> libxmlrpc_util.so.3.33
-rwxr-xr-x 1 root root   62204 Nov 16 21:24 /usr/local/lib/libxmlrpc_util.so.3.33
-rw-r--r-- 1 root root  305142 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmlparse.a
lrwxrwxrwx 1 root root      23 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmlparse.so -> libxmlrpc_xmlparse.so.3
lrwxrwxrwx 1 root root      26 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmlparse.so.3 -> libxmlrpc_xmlparse.so.3.33
-rwxr-xr-x 1 root root  202324 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmlparse.so.3.33
-rw-r--r-- 1 root root  315958 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmltok.a
lrwxrwxrwx 1 root root      21 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmltok.so -> libxmlrpc_xmltok.so.3
lrwxrwxrwx 1 root root      24 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmltok.so.3 -> libxmlrpc_xmltok.so.3.33
-rwxr-xr-x 1 root root  273396 Nov 16 21:24 /usr/local/lib/libxmlrpc_xmltok.so.3.33
 
Bash:
-L/usr/local/lib   -lxmlrpc_server -lxmlrpc_server_abyss -lxmlrpc_server -lxmlrpc_abyss  -lpthread -lxmlrpc  -lxmlrpc_xmlparse -lxmlrpc_xmltok -lxmlrpc_util
 
Ich habe jetzt Folgendes erhalten:
Bash:
sudo gcc `xmlrpc-c-config --cflags` `xmlrpc-c-config abyss-server server-util --libs` -o xmlrpcc xmlrpcc.c
/tmp/cchUJKxJ.o: In Funktion `sample_add':
xmlrpcc.c:(.text+0x2a): Nicht definierter Verweis auf `xmlrpc_parse_value'
xmlrpcc.c:(.text+0x5f): Nicht definierter Verweis auf `xmlrpc_build_value'
/tmp/cchUJKxJ.o: In Funktion `main':
xmlrpcc.c:(.text+0x79): Nicht definierter Verweis auf `xmlrpc_env_init'
xmlrpcc.c:(.text+0x85): Nicht definierter Verweis auf `xmlrpc_registry_new'
xmlrpcc.c:(.text+0xbd): Nicht definierter Verweis auf `xmlrpc_registry_add_method'
xmlrpcc.c:(.text+0xeb): Nicht definierter Verweis auf `xmlrpc_server_abyss'
collect2: error: ld returned 1 exit status
 
Warum verwendest du eigentlich immer sudo? Kompilieren setzt keinerlei Root-Rechte voraus, wenn man es nicht gerade in Verzeichnissen tut, die Schreibrechte nur für Root hat.

Poste doch bitte mal die Ausgabe von

Bash:
gcc -v `xmlrpc-c-config --cflags` `xmlrpc-c-config abyss-server server-util --libs` -o xmlrpcc xmlrpcc.c
 
Damit der das auf jeden Fall kompiliert. Mir war nicht bewusst, dass es keine Root Rechte voraussetzt... Aber Danke :)
Bash:
 gcc -v `xmlrpc-c-config --cflags` `xmlrpc-c-config abyss-server server-util --libs` -o xmlrpcc xmlrpcc.c
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.8/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
COLLECT_GCC_OPTIONS='-v' '-I' '/usr/local/include' '-L/usr/local/lib' '-o' 'xmlrpcc' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-linux-gnu/4.8/cc1 -quiet -v -I /usr/local/include -imultiarch i386-linux-gnu xmlrpcc.c -quiet -dumpbase xmlrpcc.c -mtune=generic -march=i686 -auxbase xmlrpcc -version -fstack-protector -Wformat -Wformat-security -o /tmp/ccde92x1.s
GNU C (Ubuntu 4.8.4-2ubuntu1~14.04) version 4.8.4 (i686-linux-gnu)
        compiled by GNU C version 4.8.4, GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/i386-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.8/../../../../i686-linux-gnu/include"
ignoring duplicate directory "/usr/local/include"
  as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/i686-linux-gnu/4.8/include-fixed
 /usr/include/i386-linux-gnu
 /usr/include
End of search list.
GNU C (Ubuntu 4.8.4-2ubuntu1~14.04) version 4.8.4 (i686-linux-gnu)
        compiled by GNU C version 4.8.4, GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 8312a66480c56ff71b4263a817795a60
COLLECT_GCC_OPTIONS='-v' '-I' '/usr/local/include' '-L/usr/local/lib' '-o' 'xmlrpcc' '-mtune=generic' '-march=i686'
 as -v -I /usr/local/include --32 -o /tmp/ccPbqWnq.o /tmp/ccde92x1.s
Die GNU-Assembler-Version 2.24 (i686-linux-gnu) benutzt die BFD-Version (GNU Binutils for Ubuntu) 2.24
COMPILER_PATH=/usr/lib/gcc/i686-linux-gnu/4.8/:/usr/lib/gcc/i686-linux-gnu/4.8/:/usr/lib/gcc/i686-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.8/:/usr/lib/gcc/i686-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.8/:/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib/:/lib/i386-linux-gnu/:/lib/../lib/:/usr/lib/i386-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/i686-linux-gnu/4.8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-I' '/usr/local/include' '-L/usr/local/lib' '-o' 'xmlrpcc' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-linux-gnu/4.8/collect2 --sysroot=/ --build-id --eh-frame-hdr -m elf_i386 --hash-style=gnu --as-needed -dynamic-linker /lib/ld-linux.so.2 -z relro -o xmlrpcc /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.8/crtbegin.o -L/usr/local/lib -L/usr/lib/gcc/i686-linux-gnu/4.8 -L/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib -L/lib/i386-linux-gnu -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/i686-linux-gnu/4.8/../../.. -lxmlrpc_server -lxmlrpc_server_abyss -lxmlrpc_server -lxmlrpc_abyss -lpthread -lxmlrpc -lxmlrpc_xmlparse -lxmlrpc_xmltok -lxmlrpc_util /tmp/ccPbqWnq.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i686-linux-gnu/4.8/crtend.o /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crtn.o
/tmp/ccPbqWnq.o: In Funktion `sample_add':
xmlrpcc.c:(.text+0x2a): Nicht definierter Verweis auf `xmlrpc_parse_value'
xmlrpcc.c:(.text+0x5f): Nicht definierter Verweis auf `xmlrpc_build_value'
/tmp/ccPbqWnq.o: In Funktion `main':
xmlrpcc.c:(.text+0x79): Nicht definierter Verweis auf `xmlrpc_env_init'
xmlrpcc.c:(.text+0x85): Nicht definierter Verweis auf `xmlrpc_registry_new'
xmlrpcc.c:(.text+0xbd): Nicht definierter Verweis auf `xmlrpc_registry_add_method'
xmlrpcc.c:(.text+0xeb): Nicht definierter Verweis auf `xmlrpc_server_abyss'
collect2: error: ld returned 1 exit status
 
Zurück