`

利用mongodb c++ driver来编译 静态链接库, error LNK2001

阅读更多
利用mongodb c++ driver来编译 静态链接库,报错:
version.obj : error LNK2001: unresolved external symbol "void __cdecl boost::thr
ow_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexcep
tion@std@@@Z)

解决方法是修改SConstruct:
添加 env.AppendUnique(CXXFLAGS=Split("/EHsc"));
这个选项为编译动态链接库,应该去掉




以下为修改后的SConstruct,仅供参考
引用

# scons file for MongoDB c++ client library and examples

import os

# options
AddOption( "--extrapath",
           dest="extrapath",
           type="string",
           nargs=1,
           action="store",
           help="comma separated list of add'l paths  (--extrapath /opt/foo/,/foo) static linking" )

AddOption( "--prefix",
           dest="prefix",
           type="string",
           nargs=1,
           action="store",
           default="/usr/local",
           help="installation root" )


AddOption( "--release", dest="release", type="string", nargs=0, action="store", help="release build" )
  
env = Environment( MSVS_ARCH=None )
debug = False

def has_option( name ):
    x = GetOption( name )
    if x is None:
        return False

    return True

release = has_option( "release" )

if release:
    print("release")
    debug = False
else:
    print("debug")
    debug = True

def addExtraLibs( s ):
    for x in s.split(","):
        if os.path.exists( x ):
            env.Append( CPPPATH=[ x + "/include" ] )
            env.Append( LIBPATH=[ x + "/lib" ] )
            env.Append( LIBPATH=[ x + "/lib64" ] )


#add boost
boostDir = "E:/boost"
env.Append( CPPPATH=[ boostDir ] )
env.Append( LIBPATH=[ boostDir + "/lib" ] )

#add pcre
env.Append( CPPPATH=[ "./third_party/pcre-7.4" ] )
env.Append( LIBPATH=[ "./"] )

#set unicode
env.Append( CPPDEFINES=[ "_UNICODE" ] )
env.Append( CPPDEFINES=[ "UNICODE" ] )
   

#env.Append( CPPFLAGS="Ehsc" )
env.AppendUnique(CXXFLAGS=Split("/EHsc"));

if GetOption( "extrapath" ) is not None:
    addExtraLibs( GetOption( "extrapath" ) )



env.Append( CPPPATH=[ "mongo/" ] )
env.Append( CPPDEFINES=[ "_SCONS" , "MONGO_EXPOSE_MACROS" ] )

nix = False
linux = False

if "darwin" == os.sys.platform:
    addExtraLibs( "/opt/local/" )
    nix = True
elif "linux2" == os.sys.platform or "linux3" == os.sys.platform:
    nix = True
    linux = True

if nix:
    env.Append( CPPFLAGS=" -O3" )
    env.Append( LIBS=["pthread"] )
if linux:
    env.Append( LINKFLAGS=" -Wl,--as-needed -Wl,-zdefs " )

#add libs: thread, filesystem, program_options
boostLibs = [ "thread" , "filesystem", "program_options" ]

#for lib in boostLibs:
#env.Append( LIBS=[ "boost_%s-vc100-mt-1_48" % lib] )
#print("boost_%s-vc100-mt-1_48" % lib)

conf = Configure(env)
if debug:
    env.Append( CPPDEFINES=[ "_DEBUG" ] )
    env.Append( CPPFLAGS=" /MTd " )
    for lib in boostLibs:
        if not conf.CheckLib("boost_%s-vc100-mt-gd-1_48" % lib):
            conf.CheckLib("boost_%s-mt-1_48" % lib)
else:
    env.Append( CPPDEFINES=[ "NDEBUG" ] )
    env.Append( CPPFLAGS=" /MT " )
    for lib in boostLibs:
        if not conf.CheckLib("boost_%s-vc100-mt-1_48" % lib):
            conf.CheckLib("boost_%s-mt-1_48" % lib)


dirs = [ "" , "bson/" , "bson/util/" ,
         "client/"  , "s/" , "shell/" ,
         "db/" ,
         "scripting/" ,
         "util/" , "util/concurrency/" , "util/mongoutils/" , "util/net/" ]

allClientFiles = []
for x in dirs:
    allClientFiles += Glob( "mongo/" + x + "*.cpp" )
allClientFiles += Glob( "mongo/util/*.c" )

libs = []
#libs += env.SharedLibrary( "mongoclient" , allClientFiles )
libs += env.Library( "mongoclient" , allClientFiles )

# install

prefix = GetOption( "prefix" )

for x in libs:
    env.Install( prefix + "/lib/" , str(x) )

for x in dirs:
    x = "mongo/" + x
    env.Install( prefix + "/include/" + x , Glob( x + "*.h" ) )

env.Alias( "install" , prefix )


# example setup

#clientTests = []
#clientEnv = env.Clone();
#clientEnv.Prepend( LIBS=["libmongoclient.a"])
#clientEnv.Prepend( LIBPATH=["."] )

# examples

#clientTests += [ clientEnv.Program( "firstExample" , [ "client/examples/first.cpp" ] ) ]
#clientTests += [ clientEnv.Program( "secondExample" , [ "client/examples/second.cpp" ] ) ]
#clientTests += [ clientEnv.Program( "whereExample" , [ "client/examples/whereExample.cpp" ] ) ]
#clientTests += [ clientEnv.Program( "authTest" , [ "client/examples/authTest.cpp" ] ) ]
#clientTests += [ clientEnv.Program( "httpClientTest" , [ "client/examples/httpClientTest.cpp" ] ) ]
#clientTests += [ clientEnv.Program( "clientTest" , [ "client/examples/clientTest.cpp" ] ) ]
#clientEnv.Alias("clientTests", clientTests, [])




分享到:
评论

相关推荐

    MongoDB C++ Driver 3.4.x

    2. **安装与配置**:在Windows环境下,首先需要下载并解压提供的压缩包`mongodb-cxx-driver-dll64-debug`,包含的库文件用于链接到你的C++项目。开发者需要将这些库文件添加到项目的编译路径中,确保编译器可以找到...

    MongoDB C++ Driver 3.4.x release

    MongoDB C++ Driver 3.4.x 是MongoDB官方提供的一款C++编程接口,它使得开发者能够使用C++语言高效地与MongoDB数据库进行交互。这个版本是针对MongoDB的一个重要更新,带来了许多性能优化、功能增强以及更好的API...

    C++ Driver for MongoDB.zip

    总的来说,MongoDB C++驱动为C++开发者提供了一个方便的工具,使他们能够利用C++的强大功能和效率来处理MongoDB数据。通过理解驱动的工作原理和使用方法,开发者可以构建高效、可靠的C++应用,与MongoDB数据库无缝...

    mongodb-driver-sync-4.2.3-API文档-中英对照版.zip

    赠送jar包:mongodb-driver-sync-4.2.3.jar; 赠送原API文档:mongodb-driver-sync-4.2.3-javadoc.jar; 赠送源代码:mongodb-driver-sync-4.2.3-sources.jar; 赠送Maven依赖信息文件:mongodb-driver-sync-4.2.3....

    MongoDB C++驱动编译教程VS2010 VS2012 VS2015

    MongoDB C++驱动编译教程,采用scons完成MongoDB C++驱动的编译,包括 boost库下载地址,MongoDB C++t驱动下载地址,包括Python 2.7.16版本 32位 X86安装包,以及驱动编译的具体教程,及编译过程中的几个示例。...

    mongodb-driver-core-4.2.3-API文档-中文版.zip

    赠送jar包:mongodb-driver-core-4.2.3.jar; 赠送原API文档:mongodb-driver-core-4.2.3-javadoc.jar; 赠送源代码:mongodb-driver-core-4.2.3-sources.jar; 赠送Maven依赖信息文件:mongodb-driver-core-4.2.3....

    mongodb-driver-sync-4.2.3-API文档-中文版.zip

    赠送jar包:mongodb-driver-sync-4.2.3.jar; 赠送原API文档:mongodb-driver-sync-4.2.3-javadoc.jar; 赠送源代码:mongodb-driver-sync-4.2.3-sources.jar; 赠送Maven依赖信息文件:mongodb-driver-sync-4.2.3....

    mongodb C++编译

    安装:mongod --dbpath=D:\mongodb\db --logpath=D:\mongodb\log\mongo.log= --install 卸载:mongod.exe --remove 最近准备把空闲时间都发在mongodb的研究上,因此将有一系列的文章记录这个过程。 直接从官网...

    mongodb-driver-core-3.5.0.jar

    MongoDB的Java驱动程序是连接Java应用程序与MongoDB服务器的关键组件,它提供了丰富的API来执行各种数据库操作。在本篇文章中,我们将深入探讨`mongodb-driver-core-3.5.0.jar`这一核心驱动包及其相关组件。 `...

    mongodb c#驱动最新驱动mongodb.driver.dll 版本2.12.0-beta1

    libzstd.dll 是 Zstandard 压缩库的动态链接库,Zstandard 是一种快速且高压缩率的压缩算法,可能被 MongoDB 驱动用作数据传输的压缩方式,提高网络传输效率。 SharpCompress.dll 是一个开源的 .NET 库,支持多种...

    mongodb 编译开发库

    在Windows环境下,通常会使用Visual Studio来编译MongoDB,因为它提供了良好的支持和优化。 1. **获取源代码**:从MongoDB官方网站的GitHub仓库下载源代码,通常是通过git克隆仓库或者直接下载zip文件。 2. **配置...

    MongoDb C++ win32 驱动

    总的来说,构建MongoDB C++ Win32驱动需要对C++编程、Windows系统、MongoDB API以及可能的第三方库(如Boost)有深入的理解。通过这个过程,你不仅可以掌握驱动的构建,还能增强对MongoDB数据库和C++开发的整体理解...

    mongodb的c++连接接口

    这意味着你可以将这些库添加到你的项目中,配置好包含路径和库依赖,然后开始编写和编译使用 MongoDB C++ 驱动的代码。 4. **设置步骤**:为了使用这些资源,你需要将 `include` 文件夹添加到项目的头文件搜索路径...

    mongodb-driver-3.4.3

    mongodb-driver-3.4.3,mongodb java开发中常用组件。

    MongoDB_3.8.2驱动jar包及其同版本依赖包bson和mongodb-driver-core

    java和mongodb连接,需要mongodb-driver,您还必须下载其依赖项: bson和 mongodb-driver-core》》3个包: mongodb-driver-3.8.2.jar; bson-3.8.2.jar; mongodb-driver-core-3.8.2.jar

    mongodb-driver-core-4.3.3.jar

    mongodb-driver-core 4.3.3版本

    mongodb编译文档及编译结果.7z

    总的来说,这个压缩包提供了从头编译MongoDB C++驱动程序的详细过程,以及如何在C++项目中使用这些驱动的实例。对于希望在C++应用中集成MongoDB的开发者来说,这是一个宝贵的资源。通过学习和实践这些步骤,开发者...

    MongoDB Java Driver 简单操作

    通过上述介绍,我们可以看到 MongoDB Java Driver 提供了一种简单而强大的方式来与 MongoDB 进行交互。无论是简单的 CRUD 操作还是复杂的查询需求,都可以通过 Java 驱动轻松实现。掌握这些基本操作对于快速开发基于...

Global site tag (gtag.js) - Google Analytics