2017-07-12 4 views
0

Ich benutze Boost 1.64 mit Visual Studio, um ein Modul für Python zu erstellen. Insbesondere verwende ich das Boost Numpy-Modul, um mit numpigen Arrays im Modul arbeiten zu können.Boost numpy Linker Fehler in Windows VS

Ich habe Boost-mit folgendem Befehl kompiliert:

b2 -j8 address-model=32 --user-config=D:\code\libraries\boost_1_64_0\user-config.jam --with-python --build-type=complete stage --stagedir=stage/win32 

In meinem Code habe ich die statischen Link definiert hinzugefügt (die von allen Stellen benötigt werden, scheinen die ich gelesen habe): #define BOOST_PYTHON_STATIC_LIB

Zwei seltsame Dinge passieren, wenn ich meinen Code zu kompilieren:

1) bei Verwendung der Diagnose definieren (define BOOST_LIB_DIAGNOSTIC) es den Compiler der statischen Version der python-Bibliothek Verknüpfung zeigt, sondern auf die dynamische Version von nu Verknüpfung mpy Bibliothek:

  • Anbindung an lib-Datei: libboost_python-vc141-mt-1_64.lib
  • Anbindung an lib-Datei: boost_numpy-vc141-mt-1_64.lib

Wenn ich Auto deaktivieren Verknüpfung und fügen Sie einfach die richtigen Bibliotheken selbst, habe ich am Ende immer ein ungelöstes Linker-Fehler auf:

error LNK2001: unresolved external symbol "class boost::python::numpy::dtype __cdecl boost::python::numpy::detail::get_float_dtype<32>(void)" ([email protected][email protected]@[email protected]@[email protected]@@[email protected]@XZ) 

das seltsame ist, dass dieser Fehler nur auf die Verwendung von Funktionen in numpy die Vorlagen verwenden geworfen wird! Ich kann tatsächlich Code ausführen, der boost_numpy-Bibliothek verwendet, die keine Template-Funktionen verwendet, und es wird verlinkt und läuft gut! Weiß jemand, warum die Template-basierten Funktionen diesen Linker-Fehler werfen? Jede Hilfe wird sehr geschätzt!

H

Antwort

0

fixiert ich den Fehler Linker durch Zugabe:

#define BOOST_NUMPY_STATIC_LIB 

So jetzt meine Präambel:

  1. #define BOOST_PYTHON_STATIC_LIB
  2. #define BOOST_NUMPY_STATIC_LIB

und der Fehler verschwindet.

H