2013-04-11 38 views
0

我是gwan的新手,目前正在编写一个简单的程序来插入和从MongoDB中选择数据。 后,我编译蒙戈-C驱动器,并把蒙戈标准库在/ usr/lib中/,我发现我的下金桂冠/ CSP文件夹中的程序有一个错误:gwan和mongodb

Linking myprog.c: undefined symbol: mongo_client 

我的程序

#include <mongo.h> 
int main(){ 
    ... 
    mongo conn[1]; 
    int status = mongo_client(conn, "192.168.1.115", 27017); 
} 

(我在Linux环境下编写的程序工作正常!)< - 我的意思是mongodb官方测试代码。

gcc -o output -lmongoc myprog_Linux.c 

任何人都可以帮我吗? 非常感谢你:)

+0

您应该检查的#pragma包括“[路径]”或链接的#pragma“[路径] modulename [.ext]“,如文档 – solisoft 2013-04-11 06:56:14

+0

中所述我曾尝试过#pragma include和#pragma链接,但仍然不工作... – moriya 2013-04-11 08:42:19

+1

最后,由于我已经包含头文件,问题得到解决! 谢谢! – moriya 2013-04-11 10:12:40

回答

1

这里是一个小样本金桂冠+ MongoDB的

一:安装MongoDB的C驱动(https://github.com/mongodb/mongo-c-driver

$ git clone https://github.com/mongodb/mongo-c-driver.git 
$ cd mongo-c-driver 
$ scons 
$ sudo scons install 

它将安装在/ usr /本地文件夹,你需要去适应它如果需要或刚生成的文件复制到/ usr/lib中&的/ usr /包括/

然后作为根运行ldconfig

$ sudo ldconfig 

一旦安装了MongoDB的C驱动,只需用简单样品尝试:

// ============================================================================ 
// C servlet sample for the G-WAN Web Application Server (http://trustleap.ch/) 
// ---------------------------------------------------------------------------- 
// mongodb.c: querying mongoDB from G-WAM 
// ============================================================================ 

#pragma link "mongoc" 
#pragma link "bson" 

#include <mongo.h> 
#include <bson.h> 
#include "gwan.h" // G-WAN exported functions 

int main(int argc, char *argv[]) 
{ 
    xbuf_t *reply = get_reply(argv); 
    mongo conn[1]; 
    int status = mongo_client(conn, "localhost", 27017); 

    if(status != MONGO_OK) { 
    switch (conn->err) { 
     case MONGO_CONN_NO_SOCKET: printf("no socket\n"); return 1; 
     case MONGO_CONN_FAIL:  printf("connection failed\n"); return 1; 
     case MONGO_CONN_NOT_MASTER: printf("not master\n"); return 1; 
    } 
    } 

    int i = 0; 
    for(i=0; i<100;i++) { 
    bson b[1]; 
    bson_init(b); 
    bson_append_new_oid(b, "_id"); 
    bson_append_string(b, "name", "Joe"); 
    bson_append_int(b, "age", 33); 
    bson_finish(b); 
    mongo_insert(conn, "tutorial.people", b, NULL); 
    bson_destroy(b); 
    } 

    xbuf_xcat(reply, "Hello Mongo !! %d %d", status, i); 

    return 200; 
} 
// ============================================================================ 
// End of Source Code 
// ============================================================================ 

享受:)

+0

太棒了!工作! – moriya 2013-04-23 04:07:11

1

如果您正在使用从G-WAN脚本的第三方库,那么你必须使用#pragma include "library_include_path"#pragma link "library_name"指令(他们更换一个makefile)。

当然,像往常一样使用C/C++,必须使用#include头来添加库使用的定义。

这是记录在G-WAN PDF manual,在developers网站上,G-WAN FAQs,并且在许多实施例中的servlet依靠各种库(libcurl中,的libmysql,libsqlite,libcairo,libmagick等)。