2013-04-11 41 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等)。