Код Python на С++

Я хочу использовать некоторый код Python в своей среде C++ для построения статистики. Я уже нашел следующую публикацию (о том, как встроить python в С++), но следование инструкциям не привело к успеху: Встроить код Python в C++ (Windows + minGW + Python 2.7.2 + Eclipse)

#include "Python.h"
int main(int f_argc, const char* f_argv [])
{
    Py_Initialize();
    const char* pythonScript = "print 'Hello, world!'\n";
    int result = PyRun_SimpleString(pythonScript);
    Py_Finalize();
    return 0;
}

Извините, но у меня нет большого опыта в создании файлов или подключении статических или динамических библиотек....

У меня есть следующая система: Windows 7 + 64 Bit + Eclipse IDE для разработчиков C/C++, версия: Juno Service Release 1 + mingw + python32

под путем и символами: + добавлен каталог включения python32 + добавлена ​​библиотека "python32", которая должна соответствовать libpython32.a + добавлен путь к библиотеке

Компиляция и компоновка, кажется, работают, но когда я пытаюсь запустить exe, я получаю следующее сообщение:

«Не удается запустить программу, поскольку на вашем компьютере отсутствует python32.dll. Попробуйте переустановить программу, чтобы решить эту проблему».

Я не могу понять это сообщение, потому что пытаюсь добавить статическую библиотеку (libpython32.a) в исходный код. Не могли бы вы слегка подтолкнуть меня в правильном направлении?

Большое спасибо за Вашу помощь!

РЕДАКТИРОВАТЬ: добавлен makefile и objects.mk

MAKEFILE ################################################## ################################ # Автоматически сгенерированный файл. Не редактировать! ################################################### ###############################

-include ../makefile.init

RM := rm -rf

# All of the sources participating in the build are defined here
-include sources.mk
-include src/subdir.mk
-include subdir.mk
-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
endif

-include ../makefile.defs

# Add inputs and outputs from these tool invocations to the build variables 

# All Target
all: Sandbox.exe

# Tool invocations
Sandbox.exe: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: Cross G++ Linker'
g++ -L"C:\Python32\libs" -o "Sandbox.exe" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '

# Other Targets
clean:
-$(RM)     $(C++_DEPS)$(OBJS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) Sandbox.exe
-@echo ' '

.PHONY: all clean dependents
.SECONDARY:

-include ../makefile.targets

ОБЪЕКТЫ.МК

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

USER_OBJS :=

LIBS := -lgdi32 -ljpeg-8 -ltiff-5 -lpython32

person bobby    schedule 08.12.2012    source источник
comment
Кстати, подумайте и об обратном: превратите свой код статистики на C++ в модуль Python. SWIG облегчит вам задачу.   -  person Kos    schedule 09.12.2012


Ответы (2)


В Windows путь поиска программы и путь поиска общей библиотеки управляются одной и той же переменной среды PATH. Чтобы внедрить Python, вам нужно поместить каталог, содержащий python32.dll, обычно c:\python3.2, в ваш PATH.

Объяснения, как изменить PATH на Windows, легко гуглятся; см., например, эту видеотрансляцию, в которой объясняется, как работать с Python, или этот ответ SO, объясняющий процедуру для Ruby.

Запуск Python в Windows также описан в Часто задаваемые вопросы по Python для Windows.

person user4815162342    schedule 08.12.2012

Статическая библиотека (libpython32.a), которую вы использовали, не является настоящей статической библиотекой, она содержит только определение python32.dll. так что это не что иное, как оболочка для python32.dll.

вы должны добавить папку установки python в свой Windows PATH, чтобы Windows могла сама найти dll.

person ray_linn    schedule 11.12.2012