0

I'm trying to create example boost.python module, but i have only link errors

The boost was built with command

b2 --with-python address-model=64 toolset=msvc --build-dir=build link=shared install stage

the cmake file is this

cmake_minimum_required(VERSION 3.12)
project(my_project)

find_package(Python REQUIRED COMPONENTS Development)

message("found python, version = ${Python_VERSION}")
message("found python, version_major = ${Python_VERSION_MAJOR}")
message("found python, version_minor = ${Python_VERSION_MINOR}")

find_package(Boost COMPONENTS python)

message("Boost Dir: ${Boost_DIR}")
message("Boost Found: ${Boost_FOUND}")
message("Boost Found: ${Boost_INCLUDE_DIR}")

add_library(my_module MODULE my_module.cpp wrap.cpp)

message("trying to link with ${Boost_LIBRARIES}")


target_include_directories(my_module PRIVATE ${Python_INCLUDE_DIRS})
target_link_libraries(my_module PRIVATE ${Python_LIBRARIES})

target_link_libraries(my_module PRIVATE Boost::python)

the output: wrap.obj : error LNK2019: reference to deprecated extern symbol "__declspec(dllimport) void __cdecl boost::python::thr ow_error_already_set(void)" (_imp?throw_error_already_set@python@boost@@YAXXZ) в функции "struct _object * __cdecl bo ost::python::expect_non_null(struct _object *)" (??$expect_non_null@U_object@@@python@boost@@YAPEAU_obj ect@@PEAU2@@Z). [...\build\my_module.vcxproj] ans so on ...

wrap.cpp:

#include <iostream>
#include <boost/python.hpp>
#include "my_module.h"

using namespace boost::python;

BOOST_PYTHON_MODULE( example )
{
    class_<Some>( "Some" )
        .def( init<int,string>( args( "some_id", "name" ) ) )
        .def( "ID", &Some::ID )
        .def( "Name", &Some::Name, return_value_policy<copy_const_reference>() )
        .def( "ResetID", static_cast< void (Some::*)() >( &Some::ResetID ) )
        .def( "ResetID", static_cast< void (Some::*)(int) >( &Some::ResetID ), args( "some_id" ) )
        .def( "ChangeName", &Some::ChangeName, args( "name" ) )
        .def( "SomeChanges", &Some::SomeChanges, args( "some_id", "name" ) );
}

1 Answer 1

0

The problem, is that you are linking to Boost::python, while the exact python version is 3.10. Therefor, you should link to Boost::python310 and find_package(Boost COMPONENTS python310) or any another version of python (I know, that your python version is 310, because I'am you)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.