Ceci est le premier message. J'ai récemment demandé à toucher Python, mais c'est lent. Mais quand j'ai dû l'écrire en Python, j'ai demandé: "Je devrais l'appeler C!?" Mais cela n'a pas fonctionné comme je l'ai fait dans les articles écrits par d'autres. Je me demandais si la référence ou quelque chose n'allait pas, mais j'ai fait une note parce qu'elle bougeait quand je la déplaçais de force.
Il semble que vous devriez utiliser celui appelé ** Boost.Python **. Je ne pouvais pas parcourir la bibliothèque, alors je les ai tous mis dans un même répertoire et les ai déplacés.
macOS 10.13.6 Python 3.7 BoostPython 1.68.0
J'ai préparé un répertoire * pour exécuter ce programme. Je pense que ça peut être n'importe où, mais j'ai choisi ~ / Python / BoostPythonTest /
. Préparez les éléments suivants ici.
libboost_python37.dylib Installez Boost.Python ci-dessous. [^ 1]
% brew install boost-python3
Une fois installé, vous devriez avoir / usr / local / Cellar / boost-python3 / 1.68.0 / lib / libboost_python37.dylib
, copiez-le dans le * répertoire courant *.
libpython3.7.dylib Installez Python. [^ 1]
% brew install python3
Copiez / usr / local / Cellar / python / 3.7.2 / Frameworks / Python.framework / Versions / 3.7 / Python
dans le * répertoire en cours * et renommez-le en libpython3.7.dylib
.
J'ai préparé une source appelée hello.cpp
pour les tests.
hello.cpp
#include <boost/python.hpp>
#include <stdio.h>
char greet(int x){
printf("printHELLO!!\n");
return '0' + x + 1;
}
char const* fine(){
return "How are you?";
}
BOOST_PYTHON_MODULE(hello){
using namespace boost::python;
def("greet", greet);
def("fine", fine);
}
J'ai préparé une source appelée test.py
pour les tests.
test.py
import hello
x = hello.greet(2)
print(x)
y = hello.file()
print(y)
Vous devriez pouvoir compiler avec: Recherchez simplement les fichiers dans le * répertoire en cours d'exécution *.
% g++ -fPIC -Wall -O2 -shared -o hello.so hello.cpp libboost_python37.dylib libpython3.7.dylib
hello.so
est créé dans le * répertoire d'exécution *.
Essayez de l'exécuter.
% python3 test.py
printHELLO!!
3
How are you?
Cela semble être fait correctement.
C'était un peu une méthode de force brute pour tout mettre dans un répertoire et le déplacer, mais cela a fonctionné pour le moment, alors faisons-le.
J'ai essayé de l'exécuter sur Ubuntu, mais je n'ai pas pu. J'utilise dylib
, donc cela semble inutile à moins que ce ne soit un Mac.
[1] Enveloppez c / c ++ pour qu'il puisse être utilisé en python https://www.quark.kj.yamagata-u.ac.jp/~hiroki/python/?id=19
[2] De l'installation de boost à l'exécution (boost :: python). http://nonbiri-tereka.hatenablog.com/entry/2014/02/01/004547
[^ 1]: Si vous obtenez une erreur d'autorisation lors de l'utilisation de brew
, faites sudo brew ...
.