编译xmlrpc-c程序的问题

时间:2015-12-06 11:58:54

标签: c linux xml-rpc

我正在尝试xmlrpc-c文档中的示例:

#include <stdio.h>
#include <xmlrpc.h>
#include <xmlrpc_server.h>
//#include <xmlrpc_server_abyss.h>
#include <xmlrpc_abyss.h>
#include <xmlrpc-c/base.h>
#include <xmlrpc-c/util.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_decompose_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;
}

我尝试使用gcc编译: gcc source.c

没有花哨的,我得到: /tmp/ccfGuc6A.o:在函数sample_add': source.c:(.text+0x38): undefined reference to xmlrpc_decompose_value'中 source.c :(。text + 0x6d):对xmlrpc_build_value' /tmp/ccfGuc6A.o: In function main'的未定义引用: source.c :(。text + 0x96):未定义引用xmlrpc_env_init' source.c:(.text+0xa5): undefined reference to xmlrpc_registry_new' source.c :(。text + 0xd8):对xmlrpc_registry_add_method' source.c:(.text+0x117): undefined reference to xmlrpc_server_abyss'的未定义引用 collect2:错误:ld返回1退出状态

这些功能存在于: /usr/include/xmlrpc-c/base.h 我引用的是:

包括

我想我没有通过正确的选项来链接,但我不知道它是如何完成的。

感谢

2 个答案:

答案 0 :(得分:2)

您绝对不会为链接器传递正确的参数。仅包含头文件实际上并不使链接器与库链接,您需要使用gcc source.c -lxmlrpc (小写L)选项告诉链接器您需要链接哪些库,例如

import re
regex = re.compile(r'( &|^)\s*count_.*?(& |$)')
new_res = []
for line in res:
    match = regex.search(line)
    if match:
        groups = match.groups()
        replacement = groups[0] if groups[0] and groups[1] else ''
        new_res.append(
            line[:m.start()] + replacement + line[m.end():]
        )
    else:
        new_res.append(line)
res = new_res
del new_res

答案 1 :(得分:1)

我相信xml-rpc-c附带了一个帮助程序,旨在帮助您获得正确的链接。它记录在这里

http://xmlrpc-c.sourceforge.net/doc/xmlrpc-c-config.html