Wir bekommen seltsame ungelöste Symbole, die Fehler verlinken, seit wir auf Visual Studio 2015 Update 3 aktualisiert haben.Nicht aufgelöste externe Symbole seit Visual Studio 2015 Update 3: Boost-Python-Verknüpfungsfehler, wenn Destruktor virtuell ist
Was wirklich seltsam ist, ist, dass boost :: get_pointer eine Template-Methode ist, die in einem Boost-Header definiert ist. Ich verstehe nicht, wie wir ein nicht definiertes externes Symbol in diesem Fall bekommen :(
Hier ist ein Wiedergabegerät, mit Boost 1,61 und 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> >();
}
Und der Fehler:
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 *)" ([email protected][email protected]@@[email protected]@[email protected]@[email protected]@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 *)" ([email protected]@@@[email protected]@@[email protected][email protected]@@@[email protected]@[email protected]@@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected][email protected]@[email protected]@@@Z) CCMasterKernelPyPy C:\work\dev\builds\internal\Master\SDK\MasterKernelPyPy\main.obj 1
Aber sobald ich die virtuelle vor dem Destruktor der Canard Klasse entfernen, dann beginnt es funktioniert .... Hat jemand eine Ahnung? Ist es ein Visual Studio Bug?
Es funktioniert! Danke für die Links und die Reparatur! – CanardMoussant
Ein [Bug] (https://connect.microsoft.com/VisualStudio/Feedback/Details/2852624) wurde für dieses Problem im Visual Studio-Fehlerverfolger abgelegt und enthält eine ähnliche Problemumgehung wie Ohad vorgeschlagen. Möglicherweise möchten Sie den Status und die Kommentare des Fehlers im Auge behalten, falls bei der nächsten Aktualisierung von Visual Studio ein Compilerfix hinzugefügt wird. – TaylorP
Vielen Dank für die Problemumgehung. Ich konnte es nicht für abstrakte Klassen schaffen, wenn es ein Include für 'boost/optional.hpp' gibt, weil die 'get_pointer'-Überladung irgendwie versucht,' boost :: optional 'zu instanziieren. Kennen Sie eine andere mögliche Problemumgehung für diesen Fall? –