一些 functions/methods 未导出到静态库 - Visual Studio 2019 C++
Some functions/methods not exported into static library - Visual Studio 2019 C++
如果这是一个错误的问题,我们深表歉意。但这是我什至不知道从哪里开始调试的东西。
我有一个库,我在其中保存通用代码。我将其构建为静态库以包含在我的项目中。该库和项目是用 C++ 编写的,并于 Visual Studio 2019 年构建。
我刚刚对一些代码进行了一些修改(碰巧是为了处理时间和日期),突然间,我在相关 .cpp 文件中的大部分函数和方法不再导出到我的静态库中。
当我尝试使用这些 functions/methods 时,我现在遇到未解决的符号链接器错误。我有 运行
dumpbin /symbols /exports mylibrary.lib > exports.txt
并搜索此输出,显示仅列出了少数与我的 function/method 定义相关联的符号。我的大部分方法都缺少符号,包括那些我有链接器错误的方法。
我的问题是 - 我是否做了足够的工作来证明我的函数没有被导出 - 即 dumpbin /symbols /exports
是正确的命令使用吗?其次,如果我正确执行了该检查,我怎么可能只导出了一些 methods/functions 并且我可以采取任何步骤来修复它或进一步调试?我什至没有意识到在构建静态库时这是可能的。
请注意,我正在构建静态库,而不是导入库或 dll。
编辑:
未导出方法的一个示例是
constexpr int sci::UtcTime::getYear() const
{
return m_cTime.tm_year+1900;
}
其中sci
是命名空间,UtcTime
是我的时间相关class,m_cTime
是UtcTime
的std::tm
成员变量.
我尝试过清理和重建一切,甚至在绝望中重新启动我的电脑。
编辑 2:
删除 constexpr
似乎会导致导出符号并解决链接器问题。为什么会这样?
正如我在评论中提到的,constexpr
暗示 inline
这会导致编译器根本不发出符号。
您的编辑也是事实证明。我会说它按预期工作。现在,您可以选择是要导出函数还是要 constexpr
合格。
至于为什么你现在开始看到这个,VC++ 在过去 5 年左右的时间里一直在进行与合规性相关的更改,通常每个版本都更符合最新的语言标准发布时间比以前的版本。
如果这是一个错误的问题,我们深表歉意。但这是我什至不知道从哪里开始调试的东西。
我有一个库,我在其中保存通用代码。我将其构建为静态库以包含在我的项目中。该库和项目是用 C++ 编写的,并于 Visual Studio 2019 年构建。
我刚刚对一些代码进行了一些修改(碰巧是为了处理时间和日期),突然间,我在相关 .cpp 文件中的大部分函数和方法不再导出到我的静态库中。
当我尝试使用这些 functions/methods 时,我现在遇到未解决的符号链接器错误。我有 运行
dumpbin /symbols /exports mylibrary.lib > exports.txt
并搜索此输出,显示仅列出了少数与我的 function/method 定义相关联的符号。我的大部分方法都缺少符号,包括那些我有链接器错误的方法。
我的问题是 - 我是否做了足够的工作来证明我的函数没有被导出 - 即 dumpbin /symbols /exports
是正确的命令使用吗?其次,如果我正确执行了该检查,我怎么可能只导出了一些 methods/functions 并且我可以采取任何步骤来修复它或进一步调试?我什至没有意识到在构建静态库时这是可能的。
请注意,我正在构建静态库,而不是导入库或 dll。
编辑:
未导出方法的一个示例是
constexpr int sci::UtcTime::getYear() const
{
return m_cTime.tm_year+1900;
}
其中sci
是命名空间,UtcTime
是我的时间相关class,m_cTime
是UtcTime
的std::tm
成员变量.
我尝试过清理和重建一切,甚至在绝望中重新启动我的电脑。
编辑 2:
删除 constexpr
似乎会导致导出符号并解决链接器问题。为什么会这样?
正如我在评论中提到的,constexpr
暗示 inline
这会导致编译器根本不发出符号。
您的编辑也是事实证明。我会说它按预期工作。现在,您可以选择是要导出函数还是要 constexpr
合格。
至于为什么你现在开始看到这个,VC++ 在过去 5 年左右的时间里一直在进行与合规性相关的更改,通常每个版本都更符合最新的语言标准发布时间比以前的版本。