链接 Mongo C 驱动程序静态库时出现未定义的符号引用错误

Undefined reference to symbol error when linking Mongo C driver static library

我正在尝试使用 Mongo C driver 构建程序。我的 CMake 配置包括:

include_directories("/usr/local/include/libmongoc-1.0")
include_directories("/usr/local/include/libbson-1.0")
...
SET (STATIC_LIBS
    ...
    libmongoc-static-1.0.a
    libbson-static-1.0.a
)

TARGET_LINK_LIBRARIES(myapp ${STATIC_LIBS})

编译阶段一切顺利(因此似乎正确找到了包含),但是在链接阶段发生时出现此错误:

/usr/bin/ld: /usr/local/lib/libmongoc-static-1.0.a(mongoc-counters.c.o): undefined reference to symbol 'shm_unlink@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/librt.so.1: error adding symbols: DSO missing from command line

它似乎正确地找到了静态库文件,但其中有些东西不喜欢它...

有人发现了类似的错误吗?有没有已知的解决方案?

关于我的系统的一些附加信息:

谢谢!

编辑: 对此进行调试,我发现如果我以这种方式构建 Mongo 不支持 SHM 计数器的 C 驱动程序:

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DENABLE_SHM_COUNTERS=OFF -DENABLE_STATIC=ON ..

然后上面的错误就消失了。然而,这个新的和类似的发生了:

/usr/bin/ld: /usr/local/lib/libmongoc-static-1.0.a(mongoc-scram.c.o): undefined reference to symbol 'usprep_close_57'
//usr/lib/x86_64-linux-gnu/libicuuc.so.57: error adding symbols: DSO missing from command line

我想我终于通过这种方式解决了问题(在查看this piece of documentation之后):

include_directories("/usr/local/include/libmongoc-1.0")
include_directories("/usr/local/include/libbson-1.0")
...

find_package (mongoc-1.0 1.17.4 EXACT)

SET (STATIC_LIBS
    ...
    mongo::mongoc_static
)

TARGET_LINK_LIBRARIES(myapp ${STATIC_LIBS})

我不需要使用 -DENABLE_SHM_COUNTERS=OFF -DENABLE_STATIC=ON 来构建驱动程序并且文档中推荐的方法有效:

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..