无法链接MongoDB C驱动程序?

时间:2014-04-03 19:43:26

标签: c mongodb linker

我使用以下说明编译了Mongo C驱动程序:

  

http://api.mongodb.org/c/current/building.html

使用命令:

  

scons --m32 --standard-env

我现在正试图在另一个项目中使用驱动程序,在我用来编译驱动程序的同一台机器上。我的环境是Windows 7(64位)使用Visual Studio 2008(SP1)标准。我不是,但是使用IDE,而是通过命令提示符自定义makefile。

我将它添加到我的项目'makefile',指向INCLUDE到mongo.h文件夹 我将它添加到我的项目的makefile,指向LIBS到mongoc.lib文件夹

我的代码是:

#include "blakserv.h"

mongo conn;

void InitMongo()
{
    mongo_init( &conn );
    mongo_client( &conn, "127.0.0.1", 27017 );
}

void EndMongo()
{
    mongo_destroy( &conn );
}

链接命令:

link -nologo    debug\main.obj debug\loadkod.obj debug\class.obj debug\message.obj debug\object.obj debug\sendmsg.obj debug\roofile.obj debug\bufpool.obj debug\ccode.obj debug\channel.obj debug\list.obj debug\timer.obj debug\session.obj debug\loadrsc.obj debug\blakres.obj debug\roomdata.obj debug\commcli.obj debug\string.obj debug\async.obj debug\loadgame.obj debug\game.obj debug\term.obj debug\account.obj debug\loadacco.obj debug\saveacco.obj debug\savestr.obj debug\loadstr.obj debug\nameid.obj debug\time.obj debug\dllist.obj debug\trysync.obj debug\saveall.obj debug\loadall.obj debug\synched.obj debug\motd.obj debug\admin.obj debug\garbage.obj debug\kodbase.obj debug\savegame.obj debug\user.obj debug\system.obj debug\resync.obj debug\gamelock.obj debug\config.obj debug\apndfile.obj debug\admincons.obj debug\builtin.obj debug\version.obj debug\systimer.obj debug\memory.obj debug\interface.obj debug\intrlock.obj debug\chanbuf.obj debug\debug.obj debug\saversc.obj debug\adminfn.obj debug\table.obj debug\parsecli.obj debug\rscload.obj debug\crc.obj debug\md5.obj debug\maintenance.obj debug\block.obj debug\stringinthash.obj debug\intstringhash.obj debug\files.obj debug\sprocket.obj debug\database.obj debug\blakmongo.obj debug\blakserv.res gdi32.lib user32.lib wsock32.lib winmm.lib comctl32.liblibmysql.lib mongoc.lib bson.lib -OUT:debug\blakserv.exe /STACK:0x180000 /map /debug /subsystem:windows -nologo /debug /machine:ix86

链接错误:

blakmongo.obj : error LNK2001: unresolved external symbol __imp_@mongo_client@12
blakmongo.obj : error LNK2001: unresolved external symbol __imp_@mongo_init@4
blakmongo.obj : error LNK2001: unresolved external symbol __imp_@mongo_destroy@4
debug\blakserv.exe : fatal error LNK1120: 3 unresolved externals

链接命令清楚地显示mongoc.lib,我使用dumpbin将.lib的标题转储到文件中,这清楚地显示了所需的对象。

我也尝试将MongoDB驱动程序编译为32对64位,但收到相同的结果。

我觉得答案非常简单,而且我正在为它辩护。

这是一个开源项目,位于:https://github.com/Daenks/Meridian59_103

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我想为C驱动程序文档的状态道歉,我们实际上已经完成了重写,但没有机会更新网站上的文档。

你看起来会好得多:https://github.com/mongodb/mongo-c-driver。构建系统更现代(基于Windows的cmake,其他地方的autotools)我们甚至可以为win64提供二进制文件。除了获得更新之外,它几乎与其他驱动程序功能相同(包括2.6个功能)。

看看它,看它是否有帮助。