Je tente de suivre les Exposing Classes tutorial pour Boost.Python sur Boost.org. J'ai déjà fait le first tutorial avec succès et en commentant le code, l'erreur se produit dès que la classe apparaît. La partie où tout s'effondre est en train de créer le fichier .so à partir du fichier .cpp. Je reçois l'apparemment commun: 'Undefined symbols for architecture x86_64:'. J'ai vérifié plusieurs questions à ce sujet et tout n'avait essentiellement rien à voir avec mon cas. Je suis sur OSX 10.11.6 et j'ai utilisé macports pour installer boost, et gcc6. J'ai tout mis en place donc j'utilise réellement gcc et g ++ au lieu de clang. C'est pourquoi je ne crois pas que mon problème est related to this one parce que j'utilise le vrai g ++, je ne devrais pas avoir affaire à ce problème de libstC++ et de libC++, si je suis correct dans ma compréhension. Tous mes paquets de macports, et macports lui-même sont à jour. Quelqu'un veut-il partager son point de vue?Création de .so à partir de .cpp: Symboles non définis pour l'architecture x86_64: Boost.Python MacPorts GCC6 pas Clang
Quand je lance la commande pour créer le .donc: (Je crois que je dois manquer un lien vers un lib Boost, mais je ne sais pas ce qu'il est)
g++ -shared -o hello.so -fPIC hello.cpp `python-config --cflags --libs` -lboost_python
Je suis un peu avertissement et un court message d'erreur, mais le fichier hello.so.dSYM est créé et enregistré dans le répertoire:
cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
Undefined symbols for architecture x86_64: "boost::python::objects::function_object(boost::python::objects::py_function const&, std::pair const&)", referenced from:
init_module_hello() in cchDzx8t.o
"boost::python::objects::register_dynamic_id_aux(boost::python::type_info, std::pair ()(void))", referenced from:
init_module_hello() in cchDzx8t.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Mon code cpp est exactement le même que celui indiqué dans ce tutoriel:
#include <boost/python.hpp>
using namespace boost::python;
struct World {
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}