链接 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
它似乎正确地找到了静态库文件,但其中有些东西不喜欢它...
有人发现了类似的错误吗?有没有已知的解决方案?
关于我的系统的一些附加信息:
- gcc 版本:6.3.0
- Mongo C驱动版本:1.16.0
- Mongo数据库版本:4.4.1
- 操作系统:Debian 9.3
谢谢!
编辑: 对此进行调试,我发现如果我以这种方式构建 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 ..
我正在尝试使用 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
它似乎正确地找到了静态库文件,但其中有些东西不喜欢它...
有人发现了类似的错误吗?有没有已知的解决方案?
关于我的系统的一些附加信息:
- gcc 版本:6.3.0
- Mongo C驱动版本:1.16.0
- Mongo数据库版本:4.4.1
- 操作系统:Debian 9.3
谢谢!
编辑: 对此进行调试,我发现如果我以这种方式构建 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 ..