编译xmlrpc-c程序的问题
problems compiling xmlrpc-c program
我正在尝试 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 进行编译:
海合会 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
我已经提到:
包括
我认为我没有将正确的选项传递给 link,但我不知道它是如何完成的。
谢谢
你肯定没有为linker 传递正确的参数。仅包含一个头文件实际上并不能使 linker link 与库一起使用,您需要使用 -l
(小写 L)选项来告诉 link呃你需要link使用哪些库,比如
gcc source.c -lxmlrpc
我相信 xml-rpc-c
附带了一个帮助程序,旨在帮助您获得正确的链接。它记录在这里
我正在尝试 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 进行编译: 海合会 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 我已经提到:
包括
我认为我没有将正确的选项传递给 link,但我不知道它是如何完成的。
谢谢
你肯定没有为linker 传递正确的参数。仅包含一个头文件实际上并不能使 linker link 与库一起使用,您需要使用 -l
(小写 L)选项来告诉 link呃你需要link使用哪些库,比如
gcc source.c -lxmlrpc
我相信 xml-rpc-c
附带了一个帮助程序,旨在帮助您获得正确的链接。它记录在这里