私はBoost.orgでBoost.PythonのExposing Classes tutorialに従おうとしています。私は既にfirst tutorialを成功させました。コードをコメントアウトすると、クラスが表示されるとすぐにエラーが発生します。すべてが崩壊する部分は、.cppファイルから.soファイルを作ることにあります。私は明らかに共通の: 'アーキテクチャx86_64の未定義シンボル:'を取得します。私はこの件に関して複数の質問をチェックしたが、すべては本質的に私の場合とは関係がなかった。私はOSX 10.11.6を使用しており、Macportを使ってboostとgcc6をインストールしました。私はすべてを設定しているので、実際にgccとg ++をclangの代わりに使用します。これは私の問題がrelated to this oneだと私は信じていないのですが、実際のg ++を使っているので、私はこのlibstC++とlibC++の問題を扱ってはいけません。 macportsの私のパッケージとmacports自体はすべて最新のものです。誰かがいくつかの洞察力を共有するように気をつけますか.cppから.soを作る:アーキテクチャx86_64のための未定義シンボル:Boost.Python MacPorts GCC6 not Clang
私は.soのを作成するためのコマンドを実行すると:(私はブースト内のlibにいくつかのリンクを欠けてしなければならないと考えているが、私はそれが何であるか見当がつかない)
g++ -shared -o hello.so -fPIC hello.cpp `python-config --cflags --libs` -lboost_python
私は少しを得ます警告とショートのエラーメッセージが、hello.so.dSYMファイルが作成されたディレクトリに保存されます。
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
そのチュートリアルのように私の.cppのコードはまったく同じです:
#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)
;
}