2016-07-27 3 views
0

私は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) 
    ; 
} 

答えて

0

GCC/G ++が正しくインストールされているかどうかに関わらず、MacPortsは、デフォルトでlibangがコンパイルされるシステムでは常にlibC++に対してC++ソフトウェアをビルドします。

これは、あなたのMacPortsバージョンのBoostがlibC++でコンパイルされていることを意味しています.GCC/G ++で使用することはできません。

あなたの問題はあなたがリンクした他の投稿に記載されたものではないと思われますが、それはまさにそのことです。あなたのオプションは以下のとおりです。

  • 使用打ち鳴らす++
  • グラムとブーストのあなた自身のコピーを作成します++
関連する問題