【问题标题】:Trouble linking mongod to archive files无法将 mongod 链接到存档文件
【发布时间】:2014-01-18 03:22:08
【问题描述】:

我一直在尝试将 mongod 链接到存档文件,而不是使用共享库。目前,我将 mongod 链接到共享库(.so 文件)没有问题,一切正常。但是,静态库和外部构建的存档文件有些不同。

这就是我基本上想要做的事情。我有两个 .a 文件,比如 lib1.alib2.a,我正在使用 make 来生成这些文件。我要做的是通过修改 SCons 构建脚本(位于 mongo/src/db 中的那个)将这两个存档文件静态链接到 mongod。我期望看到的是这样的:

g++ -o build/linux2/normal/mongo/mongod ........ somapath/lib1.a somepath/lib2.a ..... -lpthread -lrt

由于我对 SCons 不熟悉,因此到目前为止更改它对我来说很麻烦。有人知道我应该怎么做吗?

【问题讨论】:

    标签: c++ mongodb gcc scons


    【解决方案1】:

    对于 g++,通常不会以这种方式指定库及其路径。通常 g++ 命令行应该是这样的:

    g++ -o build/linux2/normal/mongo/mongod ........ -Lsomapath1 -Lsomepath2 -llib1.a -llib2.a  -lpthread -lrt
    

    这可以在 SCons 中使用如下的 SConscript 构建脚本来实现:

    env = Environment()
    env.Append(LIBPATH=['somepath1', 'somepath2'])
    env.Append(LIBS=['1', '2', 'pthread', 'rt'])
    env.Program(target='build/linux2/normal/mongo/mongod', source='yourSourceFiles')
    

    请注意,对于库和库路径,您不需要指定“-L”或“-l”。此外,您无需指定库前缀或后缀,因此库名称为“1”和“2”。

    【讨论】:

    • 我已经尝试过这种方式,但问题是使用共享对象时,我总是得到一个错误,表明链接器无法在两个共享对象之间建立正确的链接。但是,当我使用静态链接,使用 .a 文件时,一切都很好。我正在为构建脚本中的 mongod 寻找一种方法。
    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 2020-11-30
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多