【发布时间】:2016-10-01 15:05:27
【问题描述】:
随意编辑标题:老实说,我不知道这个问题的重要信息是什么......
链接应用程序时,我看到一些非常奇怪的缺失符号(针对 gRPC 和 Kinect10 SDK 构建,如果重要,ptr 类型在 gRPC 静态库中定义),但仅在使用 std::unique_ptr 时。我实际上根本没有使用 ptr(还),但如果我转换为原生 ptr,它不会出错。
为什么会发生这种情况?我正在用 VS2015 x64 编译
std::unique_ptr<grpc::Server> m_server;
//grpc::Server* m_server;
1>libeay32.lib(rand_win.obj):错误 LNK2019:函数 readscreen 中引用的未解析的外部符号 __imp_CreateCompatibleBitmap 1>libeay32.lib(rand_win.obj) : 错误 LNK2019: 函数 readscreen 中引用的未解析的外部符号 __imp_DeleteObject 1>libeay32.lib(rand_win.obj) : 错误 LNK2019: 函数 readscreen 中引用的未解析的外部符号 __imp_GetDeviceCaps 1>libeay32.lib(rand_win.obj) : 错误 LNK2019: 函数 readscreen 中引用的未解析的外部符号 __imp_GetDIBits 1>libeay32.lib(rand_win.obj) : 错误 LNK2019: 函数 readscreen 中引用的未解析的外部符号 __imp_GetObjectW
如果我反转声明,错误就会消失
//std::unique_ptr<grpc::Server> m_server;
grpc::Server* m_server;
========== 构建:1 个成功,0 个失败,0 个最新,0 个跳过 ==========
错误本身也很奇怪——这些错误来自 gRPC 的构建。我链接到静态库,所以很明显我可能只是缺少链接到另一个库(如果 unique_ptr 事情变得有意义的话) - 但我无法想象为什么 gRPC 会调用 getDIBits?这有什么意义吗(注意 - 我没有阅读源代码来验证,这看起来很奇怪)。我链接在一起的库是否可能会相互混淆?可能是由于名称/fn 定义之间的冲突,还是其他原因?
【问题讨论】:
标签: c++ stl linker static-linking grpc