Good day, I have a few problems with simple examples from boost::python - All methods that must return any types except char const*
or create Classes doesn't return anything and all what do I see its RESTART: Shell
.
I'm using:
which was built with the next arguments:
bootstrap gcc
b2 -j12 toolset=gcc runtime-link=shared architecture=x86 address-model=64 --with-python cxxflags="-D__int64=\"long long int\" -DBOOST_REGEX_MATCH_EXTRA -D__NO_INLINE__ -D_hypot=hypot" --build-type=complete --layout=tagged stage
CMakeList.txt contains:
cmake_minimum_required(VERSION 3.13)
project(pylibtest)
set(CMAKE_CXX_STANDARD 17)
set(GCC_COVERAGE_COMPILE_FLAGS "-march=native -m64 -D_hypot=hypot -static -static-libstdc++ -static-libgcc -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
message(STATUS "start running cmake...")
set(Boost_DEBUG OFF)
#set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
#set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.68.0 COMPONENTS python37 REQUIRED)
if(NOT Boost_FOUND)
set(Boost_LIBRARY_DIR "${Boost_Path}/stage/lib")
message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARY_DIR}")
message(STATUS "Boost_VERSION: ${Boost_VERSION}")
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARIES})
endif()
find_package(PythonInterp 3.7 REQUIRED)
find_package(PythonLibs 3.7 REQUIRED)
if(PYTHONLIBS_FOUND)
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
include_directories(${PYTHON_INCLUDE_DIRS})
link_directories(${PYTHON_LIBRARIES})
endif()
if(Boost_FOUND AND PYTHONLIBS_FOUND)
add_library(pylibtest SHARED library.cpp library.h wrap.cpp Some.cpp Some.h)
target_include_directories(pylibtest SYSTEM PRIVATE ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
target_link_libraries(pylibtest ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
endif()
wrap.cpp which are contains all methods and they definitions in python module:
#include <boost/python.hpp>
//#include "Some.h"
using namespace boost::python;
char const* SayHello()
{
return "Hello, from c++ dll!";
}
int GetMeNumber(){
int temp = 255;
return temp;
}
BOOST_PYTHON_MODULE( example )
{
def("SayHello", SayHello);
def("GetMeNumber", GetMeNumber);
}
The Python script in IDLE 3.7 (64 bit):
print("Procedure started:")
import example
print(example.SayHello())
print("Procudure ended")
print("-=-=-=-=-=-=-=-=-=-=-=-")
print("New procedure started")
count = example.GetMeNumber();
print(count)
print("New procudure ended")
And the out in Python 3.7.0 Shell:
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
===== RESTART: C:\..\pi.py =====
Procedure started:
Hello, from c++ dll!
Procudure ended
-=-=-=-=-=-=-=-=-=-=-=-
New procedure started
=============================== RESTART: Shell ===============================
>>>
When I tried to use same script in PyCharm I've got the out with error code message:
Procedure started:
Hello, from c++ dll!
Procudure ended
-=-=-=-=-=-=-=-=-=-=-=-
New procedure started
Process finished with exit code -1073741819 (0xC0000005)
Does any one know what's wrong with my out lib and what is the better way to make its work?
The code 0xC0000005 is Access Violation
error. You can try to repeat everything under the administrative account.
User contributions licensed under CC BY-SA 3.0