2017-08-07 1 views
1

Ich habe die Boost 1.64.0 Python-Bibliotheken mit MS Visual Studio Professional 2017 und 32-Bit Python 3.4 gebaut. Nun, wenn ich einen Antrag gegen die resultierende Bibliothek schreiben, ich bin auf den folgenden Link Fehler bekommen:So erstellen Sie mit den Boost Python-Bibliotheken in VS2017

LINK : fatal error LNK1104: cannot open file 'libboost_python-vc141-mt-1_64.lib'

ich in der Bühne/lib Verzeichnis ausgesehen haben, und in der Tat ist die Bibliothek mit dem Namen libboost_python -vc141-mt-1_64.lib (beachten Sie die im Namen). Ich nehme an, dass die 3 die Tatsache referenziert, dass die Boost Python-Bibliothek mit Python 3 generiert wurde. Warum gibt es eine Benennungsinkonsistenz zwischen der Bibliothek, die erstellt wurde, und der Bibliothek, die mein Projekt zu importieren versucht? Ist es einfach eine fehlende Makrodefinition in meiner Projektkonfiguration?

+0

Einige Leute, die python2 und python3 auf ihrem System haben, nennen python3 pyhon3 anstelle von python. Ich stelle mir vor, dass dies die Wurzel Ihres Problems sein könnte, aber ich weiß es wirklich nicht. – kpie

+0

Fügen Sie in 'VCC++ - Verzeichnisse -> Verzeichnisse einschließen den Pfad' c: \ .... \ Python36_3 \ include' hinzu. Ich bin mir fast sicher, dass es die Dinge funktionieren lässt. – lakeweb

Antwort

1

In MSVC baut die boost Header MSVC#pragma comments zu autolink den boost Bibliotheken verwenden, finden Sie boost/config/auto_link.hpp.

Zusätzlich auto_link.hpp zu einschließlich der boost/python/detail/config.hpp Datei enthält:

// Set the name of our library, this will get undef'ed by auto_link.hpp 
// once it's done with it: 
// 
#define BOOST_LIB_NAME boost_python 

Weswegen MSVC ist autolink zu libboost_python-vc141-mt-1_64.lib versuchen.

Offensichtlich hat Ihr boost Build stattdessen libboost_python3-vc141-mt-1_64.lib gebaut. Wie von @kpie vorgeschlagen, Ihre boost baut die Python hat Bibliotheksdatei mit dem Namen je nachdem, ob es 2 für Python 3 oder Python gebaut ist ...

Die Antworten auf this Frage beschreibt, wie boost für python 3 zu bauen. Es kann Ihre Makrofrage bezüglich des Baus beantworten.

Um das Problem zu beheben, könnten Sie disable autolinking, oder einfach umbenennen Sie die Bibliotheksdatei, um die "3" zu entfernen.

+0

Nachdem ich die Fragen und Antworten durchgelesen habe, die Sie verlinkt haben, bin ich immer noch etwas verwirrt über den richtigen Weg. Ich verstehe Ihren Vorschlag, Autolinking zu deaktivieren; bedeutet das, dass es keine Möglichkeit gibt, Auto-Linking mit Boost Python 3 zu verwenden? Wenn Sie vorschlagen, die Datei umzubenennen, ist das eine Konfigurationsoption, die in user-config.jam festgelegt wird, oder schlagen Sie vor, die Datei manuell in Windows Explorer umzubenennen? Ich finde es schwer zu glauben, dass die Boost-Python-Designer den generierten Bibliotheksnamen zwingen würden, sich von dem Namen zu unterscheiden, der automatisch verlinkt wird, ohne dass man ihn reparieren könnte. –

+0

Basierend auf einigen der Fragen, die Sie verknüpft haben, habe ich versucht, das Makro 'PY_MAJOR_VERSION = 3' zu definieren, das keinen Effekt hatte. Ich habe auch versucht, das Python 3-Include-Verzeichnis als ersten Eintrag in meiner Einstellung Zusätzliche Include-Verzeichnisse hinzuzufügen, was ebenfalls nicht funktionierte. Ich versuche vielleicht, die explizite Version aus meiner Datei user-config.jam zu entfernen und zu sehen, ob das die Bibliothek ohne die "3" im Namen generiert. –

+0

Meine Boost-Builds enthalten * beide * 'Python'- und' Python3'-Bibliotheken, ich denke, dass Ihre Benutzer-config.jam-Datei möglicherweise das Problem verursacht. 'MSVC boost 'vorgefertigte Binaries sind verfügbar [hier] (https://sourceforge.net/projects/boost/files/boost-binaries/1.64.0/) sie enthalten auch beide. Ich empfehle, dass Sie nur einen von ihnen verwenden. – kenba

Verwandte Themen