OS X에서이 예제를 boost python with cmake 시도하고 있습니다. 게시물이 조금 오래되었지만 더 새로운 것을 찾을 수 없습니다. 제 목표는 CMake를 사용하는 것입니다 (왜냐하면 CLion을 사용하기 때문에) C++과 Python 라이브러리의 통합 프로젝트를 빌드하는 것입니다. 나는 OS X에 파이썬 2.7을 사용하고OS X에서 CMake와 함께 Boost Python 사용
내 .cpp 파일이
CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "DEBUG")
#SET(CMAKE_BUILD_TYPE "RELEASE")
#SET(CMAKE_BUILD_TYPE "RELWITHDEBINFO")
#SET(CMAKE_BUILD_TYPE "MINSIZEREL")
ENDIF()
FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
FIND_PACKAGE(Boost)
IF(Boost_FOUND)
INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}" "/usr/include/python2.7")
SET(Boost_USE_STATIC_LIBS OFF)
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost COMPONENTS python)
ADD_LIBRARY(yay SHARED yay.cpp)
TARGET_LINK_LIBRARIES(yay ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
ELSEIF(NOT Boost_FOUND)
MESSAGE(FATAL_ERROR "Unable to find correct Boost version. Did you set BOOST_ROOT?")
ENDIF()
IF(CMAKE_COMPILER_IS_GNUCXX)
ADD_DEFINITIONS("-Wall")
ELSE()
SET(CMAKE_CXX_FLAGS "-Wall")
MESSAGE("You have compiler " ${CMAKE_CXX_COMPILER_ID})
#MESSAGE(FATAL_ERROR "CMakeLists.txt has not been tested/written for your compiler.")
MESSAGE("CMakeLists.txt has not been tested/written for your compiler.")
ENDIF()
마지막으로
#include <boost/python.hpp>
char const* yay()
{
return "Yay!";
}
BOOST_PYTHON_MODULE(libyay)
{
using namespace boost::python;
def("yay", yay);
}
내 CMakesLists.txt, 난 파이썬 콘솔을 열고이
from ctypes import *
ly = cdll.LoadLibrary("libyay.dylib")
print ly.yay()
을 시도
이 오류 발생 :
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 375, in __getattr__
func = self.__getitem__(name)
File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 380, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: dlsym(0x7fdb5344aec0, yay): symbol not found
C++과 Python을 통합하기위한이 전체 접근법이 구식인지, (b)이 오류가 나와 말해야하는지, (c) CMake를 사용하는 다른 접근법에 대한 지침을 알려 주시면 감사하겠습니다.