簡體   English   中英

鏈接到boost python時出錯

[英]Error linking against boost python

這是我簡單的HelloWorld程序

#include <boost/python.hpp>
using namespace boost::python;

void greet() {
    // do nothing
}

BOOST_PYTHON_MODULE(HelloWorld)
{
    def("greet", greet);
}

這是我的CMakeLists.txt文件

cmake_minimum_required(VERSION 2.8.4)
project(HW)

find_package(Boost COMPONENTS python3 REQUIRED)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories(${Boost_INCLUDE_DIRS} /Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m include)

file(GLOB_RECURSE SRC
HelloWorld.cpp
)

add_library(HelloWorld SHARED ${SRC})
target_link_libraries(HelloWorld ${Boost_LIBRARIES})

但是,由於此構建錯誤,我無法構建這個簡單的程序

Undefined symbols for architecture x86_64:
  "__Py_NoneStruct", referenced from:
      boost::python::detail::none() in HelloWorld.cpp.o
      boost::python::api::object::object() in HelloWorld.cpp.o
  "boost::python::detail::init_module(PyModuleDef&, void (*)())", referenced from:
      _PyInit_HelloWorld in HelloWorld.cpp.o
ld: symbol(s) not found for architecture x86_64

我錯過了什么? 對不起,如果這看起來像一個新手問題,但我實際上卡住了。

我想你錯過了Python庫的鏈接(而不是Boost Python庫)

嘗試類似find_package(Python)然后嘗試find_package(Python) target_link_libraries(HelloWorld ${Python_LIBRARY})

此外(基於此帖子https://www.preney.ca/paul/archives/107 )您正在構建的庫的名稱與BOOST_PYTHON_MODULE給出的名稱不匹配。 將其更改為BOOST_PYTHON_MODULE(libHelloWorld)因為cmake隱式地將lib添加到模塊名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM