在我的Visual Studio
解决方案中,我有两个不同的项目,其中一个作为static library
构建,另一个作为可执行文件构建。ODB
相关的代码,如创建数据库和所有的都在图书馆。我把这个库链接到我的可执行文件上。但是当我调试可执行代码时,我在调用create_schema()
中得到错误"unknown database schema"
。我使用SQLite
作为我的数据库。我做错了什么?
这个问题可能与这里和这里描述的问题有关,并且可以简要总结如下:如果静态库中的符号未直接用于主二进制文件,则C/c++链接器将忽略这些符号。ODB的实现可能会落入这个陷阱,这取决于您如何精确地实例化生成的代码。对于GCC/Clang的解决方案是使用--whole-archive
和MSVC,在Visual Studio 2015 Update 2及以上,/WHOLEARCHIVE
.
查看详细信息:
- ld链接器问题:——whole-archive选项
- 什么是Microsoft Visual Studio相当于GCC的ld选项——whole-archive