2017-05-24 9 views
1

python3.6をWin10 64bitシステムのC++に埋め込みます。 Pythonはpython-3.6.1-amd64.exeによってインストールされます。 CMakeList.txtはPython3.6をMinGWでC++に埋め込みました。

cmake_minimum_required(VERSION 3.8) 
project(EmbedPython) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
find_package(PythonLibs REQUIRED) 
include_directories(${PYTHON_INCLUDE_DIRS}) 
add_executable(EmbedPython ${SOURCE_FILES} ${PYTHON_INCLUDE_DIRS}) 
target_link_libraries(EmbedPython ${PYTHON_LIBRARIES}) 

の下に表示され、cmakeのは、Pythonパッケージを見つけました。

PYTHON_INCLUDE_DIR C:/Program Files (x86)/Python36/include 
PYTHON_LIBRARY C:/Program Files (x86)/Python36/libs/python36.lib 

Find a comment on githubこれはAPIの問題です。

# used to embed python script 
find_package(PythonLibs 2.7 REQUIRED) # this has to be 2.7 because the 3.0 API requires argv to be wchar_t** rather than the default char** 
include_directories(${PYTHON_INCLUDE_DIRS}) 
target_link_libraries(assignment ${PYTHON_LIBRARIES}) 

以下のエラーは、私が直面してるものです。

[ 50%] Building CXX object CMakeFiles/EmbedPython.dir/main.cpp.obj 
[100%] Linking CXX executable EmbedPython.exe 
CMakeFiles\EmbedPython.dir/objects.a(main.cpp.obj): In function `main': 
D:/Projects/EmbedPython/main.cpp:16: undefined reference to `_imp__Py_Initialize' 
D:/Projects/EmbedPython/main.cpp:17: undefined reference to `_imp__PyUnicode_DecodeFSDefault' 
D:/Projects/EmbedPython/main.cpp:20: undefined reference to `_imp__PyImport_Import' 
D:/Projects/EmbedPython/main.cpp:24: undefined reference to `_imp__PyObject_GetAttrString' 
D:/Projects/EmbedPython/main.cpp:27: undefined reference to `_imp__PyCallable_Check' 
D:/Projects/EmbedPython/main.cpp:28: undefined reference to `_imp__PyTuple_New' 
D:/Projects/EmbedPython/main.cpp:30: undefined reference to `_imp__PyLong_FromLong' 
D:/Projects/EmbedPython/main.cpp:38: undefined reference to `_imp__PyTuple_SetItem' 
D:/Projects/EmbedPython/main.cpp:40: undefined reference to `_imp__PyObject_CallObject' 
D:/Projects/EmbedPython/main.cpp:43: undefined reference to `_imp__PyLong_AsLong' 
D:/Projects/EmbedPython/main.cpp:49: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:55: undefined reference to `_imp__PyErr_Occurred' 
D:/Projects/EmbedPython/main.cpp:56: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:63: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:67: undefined reference to `_imp__Py_FinalizeEx' 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [EmbedPython.exe] Error 1 
mingw32-make.exe[2]: *** [CMakeFiles/EmbedPython.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles/EmbedPython.dir/rule] Error 2 
mingw32-make.exe: *** [EmbedPython] Error 2 
CMakeFiles\EmbedPython.dir\build.make:96: recipe for target 'EmbedPython.exe' failed 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/EmbedPython.dir/all' failed 
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/EmbedPython.dir/rule' failed 
Makefile:117: recipe for target 'EmbedPython' failed 

プロジェクトを実行するにはどうすればよいかわかりません。

編集:私は同じ問題を抱えていた 結果

D:\Projects\EmbedPython\cmake-build-debug>make VERBOSE=1 
"C:\Program Files\JetBrains\CLion 172.2273.4\bin\cmake\bin\cmake.exe" -HD:\Projects\EmbedPython -BD:\Projects\EmbedPython\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0 
"C:\Program Files\JetBrains\CLion 172.2273.4\bin\cmake\bin\cmake.exe" -E cmake_progress_start D:\Projects\EmbedPython\cmake-build-debug\CMakeFiles D:\Projects\EmbedPython\cmake-build-debug\CMakeFiles\progress.marks 
make -f CMakeFiles\Makefile2 all 
make[1]: Entering directory 'D:/Projects/EmbedPython/cmake-build-debug' 
make -f CMakeFiles\EmbedPython.dir\build.make CMakeFiles/EmbedPython.dir/depend 
make[2]: Entering directory 'D:/Projects/EmbedPython/cmake-build-debug' 
"C:\Program Files\JetBrains\CLion 172.2273.4\bin\cmake\bin\cmake.exe" -E cmake_depends "MinGW Makefiles" D:\Projects\EmbedPython D:\Projects\EmbedPython D:\Projects\EmbedPython\cmake-build-debug D:\Projects\EmbedPython\cmake-build-debug D:\Projects\EmbedPython\cmake-build-debug\CMakeFiles\EmbedPython.dir\DependInfo.cmake --color= 
make[2]: Leaving directory 'D:/Projects/EmbedPython/cmake-build-debug' 
make -f CMakeFiles\EmbedPython.dir\build.make CMakeFiles/EmbedPython.dir/build 
make[2]: Entering directory 'D:/Projects/EmbedPython/cmake-build-debug' 
[ 50%] Linking CXX executable EmbedPython.exe 
"C:\Program Files\JetBrains\CLion 172.2273.4\bin\cmake\bin\cmake.exe" -E cmake_link_script CMakeFiles\EmbedPython.dir\link.txt --verbose=1 
"C:\Program Files\JetBrains\CLion 172.2273.4\bin\cmake\bin\cmake.exe" -E remove -f CMakeFiles\EmbedPython.dir/objects.a 
C:\PROGRA~2\MINGW-~1\I686-6~1.0-P\mingw32\bin\ar.exe cr CMakeFiles\EmbedPython.dir/objects.a @CMakeFiles\EmbedPython.dir\objects1.rsp 
C:\PROGRA~2\MINGW-~1\I686-6~1.0-P\mingw32\bin\G__~1.EXE -g -Wl,--whole-archive CMakeFiles\EmbedPython.dir/objects.a -Wl,--no-whole-archive -o EmbedPython.exe -Wl,--out-implib,libEmbedPython.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\EmbedPython.dir\linklibs.rsp 
CMakeFiles\EmbedPython.dir/objects.a(main.cpp.obj): In function `main': 
D:/Projects/EmbedPython/main.cpp:16: undefined reference to `_imp__Py_Initialize' 
D:/Projects/EmbedPython/main.cpp:17: undefined reference to `_imp__PyUnicode_DecodeFSDefault' 
D:/Projects/EmbedPython/main.cpp:20: undefined reference to `_imp__PyImport_Import' 
D:/Projects/EmbedPython/main.cpp:24: undefined reference to `_imp__PyObject_GetAttrString' 
D:/Projects/EmbedPython/main.cpp:27: undefined reference to `_imp__PyCallable_Check' 
D:/Projects/EmbedPython/main.cpp:28: undefined reference to `_imp__PyTuple_New' 
D:/Projects/EmbedPython/main.cpp:30: undefined reference to `_imp__PyLong_FromLong' 
D:/Projects/EmbedPython/main.cpp:38: undefined reference to `_imp__PyTuple_SetItem' 
D:/Projects/EmbedPython/main.cpp:40: undefined reference to `_imp__PyObject_CallObject' 
D:/Projects/EmbedPython/main.cpp:43: undefined reference to `_imp__PyLong_AsLong' 
D:/Projects/EmbedPython/main.cpp:49: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:55: undefined reference to `_imp__PyErr_Occurred' 
D:/Projects/EmbedPython/main.cpp:56: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:63: undefined reference to `_imp__PyErr_Print' 
D:/Projects/EmbedPython/main.cpp:67: undefined reference to `_imp__Py_FinalizeEx' 
collect2.exe: error: ld returned 1 exit status 
CMakeFiles\EmbedPython.dir\build.make:97: recipe for target 'EmbedPython.exe' failed 
make[2]: *** [EmbedPython.exe] Error 1 
make[2]: Leaving directory 'D:/Projects/EmbedPython/cmake-build-debug' 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/EmbedPython.dir/all' failed 
make[1]: *** [CMakeFiles/EmbedPython.dir/all] Error 2 
make[1]: Leaving directory 'D:/Projects/EmbedPython/cmake-build-debug' 
Makefile:82: recipe for target 'all' failed 
make: *** [all] Error 2 
+1

すると、あなたのCMakeLists.txtと 'VERBOSE = 1 '作るからの出力を表示してくださいあなたに役立つことを願っています。また、テキストの画像を投稿しないでください。 –

+0

@ n.m。私は 'VERBOSE = 1'を作成して出力を追加し、CMake GUIからイメージを削除しました。 –

+1

'target_link_libraries'を使う必要があります。 'add_executable'は、ライブラリではなくソースを指定します。 –

答えて

0

make VERBOSE=1から。

おそらく、問題は32ビットのMinGWと64ビットのPythonを使用しているためです。あなたのpython

32ビット版をインストールする必要があり、:-)

関連する問題