gpt4 book ai didi

visual-studio - 自 Visual Studio 2015 更新 3 以来无法解析的外部符号 : boost python linking error if destructor is virtual

转载 作者:行者123 更新时间:2023-12-03 00:52:37 25 4
gpt4 key购买 nike

自从我们更新到 Visual Studio 2015 更新 3 以来,我们遇到了奇怪的 Unresolved 符号链接(symbolic link)错误。还有其他人遇到过同样类型的问题吗?

真正奇怪的是 boost::get_pointer 是一个模板方法,在 boost header 中定义。我不明白在这种情况下我们如何获得未定义的外部符号:(。

这是一个重现器,带有 boost 1.61 和 Python 3.5.1:

#include <vector>
#include <boost/python.hpp>

using namespace boost::python;

class Canard {
public:
Canard() {}
virtual ~Canard() {}
};

BOOST_PYTHON_MODULE(coin)
{
register_ptr_to_python< std::shared_ptr<Canard> >();
}

错误:

 Severity   Code    Description Project File    Line
Error LNK2019 unresolved external symbol "class Canard const volatile * __cdecl boost::get_pointer<class Canard const volatile >(class Canard const volatile *)" (??$get_pointer@$$CDVCanard@@@boost@@YAPEDVCanard@@PEDV1@@Z) referenced in function "private: static struct _typeobject * __cdecl boost::python::objects::make_ptr_instance<class Canard,struct boost::python::objects::pointer_holder<class std::shared_ptr<class Canard>,class Canard> >::get_derived_class_object<class Canard>(struct boost::mpl::bool_<1>,class Canard const volatile *)" (??$get_derived_class_object@VCanard@@@?$make_ptr_instance@VCanard@@U?$pointer_holder@V?$shared_ptr@VCanard@@@std@@VCanard@@@objects@python@boost@@@objects@python@boost@@CAPEAU_typeobject@@U?$bool_@$00@mpl@3@PEDVCanard@@@Z) CCMasterKernelPyPy C:\work\dev\builds\internal\Master\SDK\MasterKernelPyPy\main.obj 1

但是一旦我删除 Canard 类析构函数前面的虚拟,它就开始工作......有人知道吗?这是 Visual Studio 的错误吗?

最佳答案

Visual Studio 2015 update 3 添加了许多功能和改进(请参阅发行说明 https://www.visualstudio.com/news/releasenotes/vs2015-update3-vs#visualcpp)。它还存在一些已知问题(https://msdn.microsoft.com/vs-knownissues/vs2015-update3 请参阅将非指针类类型传递给 uninitialized_copy 部分)。

要解决您的问题,您需要显式指定类指针的转换,显式:

namespace boost
{
template <>
Canard const volatile * get_pointer<class Canard const volatile >(
class Canard const volatile *c)
{
return c;
}
}

祝你好运,哦哈德

关于visual-studio - 自 Visual Studio 2015 更新 3 以来无法解析的外部符号 : boost python linking error if destructor is virtual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38261530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com