0

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:

  • CLion 2018.3.3, Build #CL-183.5153.40, built on January 10, 2019;
  • MinGW-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0;
  • CMake 3.13.0-rc1-;
  • Python 3.7 (x86_64);
  • boost 1.68.0,

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?

Ja_Dim
  • 143
  • 7

1 Answers1

0

The code 0xC0000005 is Access Violation error. You can try to repeat everything under the administrative account.

uta
  • 1,451
  • 10
  • 12
  • Thank you for the response, I'm working in Win 10 under the administrative account and started all my IDEs under administrative rules by default. I don't use space where I should confirm that I'm an administrator. the main question is why return value as char const* and std::cout<< "text" works well but returning int make a problem. By the way, I get a message -1073741819 (0xC0000005) every time I execute my code with or without problem methods. – Ja_Dim Feb 07 '19 at 03:11