2017-05-24 3 views
1

Ich habe Probleme beim Binden gegen Boost Python.Verlinkung gegen Boost Python 3.6. kann boost_python statt boost_python3 nicht finden

ich Visual Studio 2017 verwenden und das Boost-1_64-Paket mit der folgenden Befehlszeile kompiliere:

b2 -a toolset=msvc-14.1 --build_type=complete stage variant=debugthreading=multi link=shared runtime-link=shared define=_ITERATOR_DEBUG_LEVEL=0 address-model=64 

Mit dieser User-config.jam:

using python 
: 3.6     # Version 
: C:\\Python36\\python.exe  # Python Path 
: C:\\Python36\\include   # include path 
: C:\\Python36\\libs   # lib path(s) 
: <define>BOOST_ALL_NO_LIB=1 
; 

Aber während meines C++ Projekt Bau mit Laufzeitbibliothek: Multi-threaded DLL (/ MD) Ich bekomme immer diese Fehlermeldung:

aber die Boost-Libs I enthalten folgende boost_python Dateien kompiliert:

boost_python3-vc141-mt-gd-1_64.dll 
boost_python3-vc141-mt-gd-1_64.lib 

Hat jemand Erfahrung mit Boost für Python 3? Nach stundenlangem Versuch kann ich keine gute Lösung finden. Btw .: umbenennen der Dateien zu boost_python- (Entfernen der 3) funktioniert gut. Aber ich glaube nicht, dass dies der richtige Weg


VC Projekteinstellungen ist:

Hinzufügen. Verzeichnisse einschließen:

C:\Python36\include;D:\ws\boost_1_64_0\boost_1_64_0; 

Hinzufügen. libary Verzeichnisse:

D:\ws\boost_1_64_0\boost_1_64_0\stage\lib;C:\Python36\libs; 

Geschlossen: Die Autolink-Funktion der Verstärkung nicht funktioniert richtig mit Python 3. Die boost_module_name Makro wurde eingestellt und die erzeugten Libs enthielt die 3.

boost_python (die 3 fehlt)

-> Deaktivierte automatische Verbindung und fügte die erforderlichen Bibliotheken manuell hinzu.


Lösung a) Go/Python/detail/config.hpp zu steigern und BOOST_LIB_NAMe ändern statt boost_python boost_python3.

oder

Lösung b) Drehen Auto Verknüpfung von durch BOOST_ALL_NO_LIB definieren und dann explizit boost_python3 ... lib als Linker Abhängigkeit.

+0

Was die Build-Befehle sind für Ihr C++ Projekt? Verwenden Sie etwas wie 'distutils.extension'? – Walter

+0

Ich verwende keine speziellen Erweiterungen oder Einstellungen. Alles was ich getan habe, war ein C++ 32 Konsolenanwendungsprojekt zu erstellen und die Code-Generierung in DLL zu ändern. Und hinzugefügt die erforderlichen Pfade enthalten natürlich –

+0

Bitte geben Sie genügend Informationen. Wie ist Ihr C++ Code zusammengestellt und insbesondere verlinkt? Gib den vollen Befehl. Wenn das nicht klappt, können wir Ihnen nicht wirklich helfen, fürchte ich. – Walter

Antwort

1

Sie bieten

boost_python3-vc141-mt-gd-1_64.dll 
boost_python3-vc141-mt-gd-1_64.lib 

aber die Berichte Fehler

boost_python-vc141-mt-gd-1_64.lib 

fehlt (Finde den Unterschied!)

So offensichtlich, IDE (VS) versucht, eine Python zu bauen, nicht eine Python3-Erweiterung.Ich kenne VS nicht, aber es muss irgendwo weg sein, um das irgendwo zu ändern.

+0

Ich habe den Unterschied bemerkt, sorry wenn das nicht klar war. aber ich konnte immer noch nicht einen Weg finden, dies in vs zu konfigurieren –

0

Ich möchte nur hier hochgehen, da dies mir passiert ist. Here is the link. Möglicherweise haben Sie die 2.7-Python-Header anstelle von 3.6 eingefügt. Und ja, nichts davon ist offensichtlich, es hat mich wirklich zur Arbeit gebracht.

0

Entschuldigung dafür, dass ich hier spät gekommen bin, ich habe den gleichen Unsinn selbst gemacht. Stellt sich heraus, dass Boost nicht zwei Installationen sehr gut behandelt (oder sogar eine py3.x selbst)

Sie können das Problem lösen, indem Sie in <boost/python/detail/config.hpp> gehen und eine schnelle Änderung vornehmen. Damit für Auftrieb sowohl mit Python 2.x arbeiten (2.7, vermutlich) und 3.x, würde ich vorschlagen, zu ändern:

#define BOOST_LIB_NAME boost_python

zu

#if PY_MAJOR_VERSION >=3 
    #define BOOST_LIB_NAME boost_python3 
#else 
    #define BOOST_LIB_NAME boost_python 
#endif 
Verwandte Themen