簡體   English   中英

在Windows上使用nvcc在鏈接到32位python 2.5時使用cuda 7.0編譯庫

[英]Compiling library with cuda 7.0 using nvcc on windows while linking to 32-bit python 2.5

我正在嘗試編譯可以使用nvcc從python調用的庫。 通常在Windows上,我使用msys / mingw工具鏈,並且可以毫無問題地編譯python擴展。 但是,當我嘗試使用nvcc進行編譯時,我相信它使用的是link.exe(是Microsoft Visual Studio的一部分)。 盡管可以編譯,但在鏈接步驟失敗。

我意識到我正在使用舊版本的python(2.5版)。 我正在使用舊版應用程序,並且暫時停留在舊版本上。

這是我正在嘗試的nvcc命令:

nvcc -I "C:\Python25\include" -I "C:\python25\Lib\site-packages\numpy\core\include\numpy" -L "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\lib\x64" -lcusolver -lcusparse -Xlinker "C:\Python25\libs\python25.lib" cusolve5.cu

但是,此消息失敗:

   Creating library a.lib and object a.exp
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyObject_GetAttrString referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyCObject_AsVoidPtr referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyErr_SetString referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyErr_Format referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyArg_ParseTuple referenced in function main
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_Py_BuildValue referenced in function main
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_Py_InitModule4_64 referenced in function "void __cdecl initbmc(void)" (?initbmc@@YAXXZ)
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyErr_Print referenced in function "void __cdecl initbmc(void)" (?initbmc@@YAXXZ)
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyImport_ImportModule referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyCObject_Type referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyExc_AttributeError referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyExc_ImportError referenced in function _import_array
tmpxft_00001128_00000000-28_cusolve5.obj : error LNK2019: unresolved external symbol __imp_PyExc_RuntimeError referenced in function _import_array
a.exe : fatal error LNK1120: 13 unresolved externals

在我看來,找不到python庫。 使用msys / mingw我可以鏈接類似的庫,如下所示:

g++ bmc.o -L "/c/python25/libs" -lpython25 -shared -o bmc.pyd

可以正常工作(但不包括我正在使用的任何GPU加速)。 我的猜測是我需要通過-Xlinker命令傳遞link.exe,但是我似乎找不到在構建時包含python庫的方法。

感謝@talonmies的提示,我得出的結論是我試圖做的事是不可能的,原因有兩個:

  1. python2.5是使用VS 2005編譯的,我無法訪問它,並且nVidia可能不支持它( http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-microsoft- Windows在其列表中未包含這樣的舊編譯器)

不過,這可以通過使用ctypes加載dll而不是標准的python導入來解決。 然而...

  1. 我的python二進制文件是32位的,而Cuda 7.0僅支持64位。 cusolver.lib和cusparse.lib(對我的優化至關重要)可以在Cuda 7.0發行版的x64目錄中找到。 在將“ --machine 32”傳遞給nvcc時鏈接到它們是行不通的,盡管這並不奇怪。

暫無
暫無

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

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