C ++ ссылка на приложение Python 3.2 x64 не может загрузить - PullRequest
0 голосов
/ 09 марта 2011

Это, наверное, вопрос в нескольких частях.

Я работаю с документацией по встраиванию интерпретатора Python. У меня есть все, что прекрасно компилируется и связывается, при запуске приложения происходит сбой (точнее, его невозможно загрузить, поэтому оно даже не запустилось).

Я использую Windows 7 Professional 64 бит. Я компилирую самую свежую ночную сборку mingw с msys (которая была упакована вместе с установщиком, поэтому я считаю, что здесь нет несоответствия совместимости). Тот же код прекрасно компилируется в Ubuntu 10.10 с использованием стандартного репозитория python 3.1 и инструментов, необходимых для сборки.

До сих пор в моем исследовании я полагал, что это "может" быть проблемой между связыванием 32-битного приложения (поскольку mingw использует 32-битный, насколько мне известно) с 64-битной библиотекой (DLL-файл Python).

Я могу опубликовать код в полном объеме, однако, поскольку это, как правило, является проблемой компоновки / запуска, я только включил make-файл для начала. Из файла makefile ниже я скопировал файл Python3.dll из C: \ Python32 \ DLLs в каталог моего проекта. Также следует отметить, что мне пришлось создать свой собственный файл .def, а затем .a из библиотеки DLL, чтобы создать ссылку (символы не найдены в противном случае). Может ли это быть источником моих проблем?

После запуска a.exe (как из командной строки, так и из проводника) я получаю стандартное окно с предупреждением:

Ошибка приложения. Не удалось правильно запустить приложение (0xc000007b). Нажмите кнопку ОК, чтобы закрыть приложение.

Поправьте меня, если я ошибаюсь, но это означает, что мой исполняемый файл каким-то образом поврежден.

Я проверил мой компилятор / компоновщик, чтобы убедиться, что это не проблема компилятора / компоновщика. Он включает, и это НЕ выдает никаких ошибок при компиляции, компоновке или запуске, когда приложение не использует python.

Спасибо за любую помощь или свет, который вы можете пролить на этот счет. Это меня действительно озадачило. pcnerd

Makefile

FILE= main.cpp
LIBS=  -lpython3
LIBPATH= -L/c/python32/libs
INCLUDEPATH = -I/c/python32/include
CPP=g++
FLAGS = -g

build:
    $(CPP) $(FLAGS) $(FILE) $(LIBS) $(LIBPATH) $(INCLUDEPATH)

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Вы не можете смешивать 32- и 64-битные изображения в одном процессе. Конец. Из. История.

0 голосов
/ 11 марта 2011

Если python3.dll определенно является 64-битным, а ваше приложение определенно 32-битным, то это не будет работать.Вы не можете связать 64-битные библиотеки из 32-битных приложений.Указатели просто не смогут работать между двумя моделями .

...