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