2016-07-27 9 views
0

Boost.org의 Boost.Python에 대해 Exposing Classes tutorial을 따르려고합니다. 나는 이미 first tutorial을 성공적으로 수행했으며 코드를 주석 처리 할 때 클래스가 나타나 자마자 오류가 발생합니다. 모든 것이 분열되는 부분은 .cpp 파일에서 .so 파일을 만드는 과정입니다. 나는 명백하게 공통적 인 : '아키텍처 x86_64에 대한 정의되지 않은 기호 :'를 얻습니다. 이 주제에 대해 여러 가지 질문을 검토 한 결과 모든 것이 본질적으로 내 사건과 관련이 없습니다. 나는 OSX 10.11.6을 사용 중이며, macports를 사용하여 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 ++에서 libC++를 사용하기 위해 여분의 고리를 건너 뛰지 않는 한 GCC/G ++에서 사용할 수 없습니다.

귀하의 문제는 귀하가 귀하가 링크 한 다른 게시물에서 설명한 것과 다르다고 생각 되나, 정확하게 그 것입니다. 옵션은 다음과 같습니다

  • 사용 연타 ++
  • g과 부스트의 자신의 사본을 작성 ++