Создание приложения C ++ с включенным кодом Python - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь создать приложение "helloworld" на C ++ со встроенным кодом Python. Я включаю Python.h, и это замечено статическим анализатором нормально. Когда я строю свой код, я получаю undefined reference to '_imp__Py_Initialize', поэтому make fail

Я использую Windows7-x64 с Python3.5-x32, MinGW-x64, CLion для написания кода. Ни одно из руководств, которые я нашел, не показывает полные пошаговые решения. Если мне нужно переустановить некоторые конкретные версии программного обеспечения, мне нужно знать - что делать ...

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(sample)
find_package(PythonLibs 3.5 REQUIRED)
find_package(PythonInterp 3.5 REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 14)
add_executable(sample main.cpp)

main.cpp

#include <Python.h>
int main() {
  Py_Initialize();
  PyRun_SimpleString("print('hello, python')");
  Py_Finalize();
  return 0;
}

Итак, тема поднимается, у меня есть неопределенная ссылка. Когда я добавляю target_link_libraries(${PYTHON_LIBRARIES}) к своему CMakeLists.txt, я получаю еще одно исключение:

Cannot specify link libraries for target
"C:/Users/...../Python35-32/python35.dll"
which is not built by this target.

Пожалуйста, дайте мне еще несколько идей, что с этим делать, если вы не возражаете.

1 Ответ

1 голос
/ 27 мая 2019

target_link_libraries принимает цель в качестве первого параметра. Из документации target_link_libraries:

Имя target должно быть создано в текущем каталоге команда типа add_executable() или add_library(). Остальные аргументы указывают имена библиотек или флаги.

Ваша цель sample, не из-за project(sample) в начале, а из-за add_executable(sample main.cpp), поэтому добавьте

`target_link_libraries(sample ${PYTHON_LIBRARIES})` 

после строки add_executable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...