windows编译MaskRCNN

来源:互联网 发布:支付宝如何解绑淘宝号 编辑:程序博客网 时间:2024/06/03 14:36


1.代码修改为3.0语言版本


2.setup_windows.py 文件内容为

#!/usr/bin/env pythonimport numpy as npimport os# on Windows, we need the original PATH without Anaconda's compiler in it:PATH = os.environ.get('PATH') + ';C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin'from distutils.spawn import spawn, find_executablefrom setuptools import setup, find_packages, Extensionfrom setuptools.command.build_ext import build_extimport sys# CUDA specific config# nvcc is assumed to be in user's PATHnvcc_compile_args = ['-O', '--ptxas-options=-v', '-arch=sm_35', '-c', '--compiler-options=-fPIC']nvcc_compile_args = os.environ.get('NVCCFLAGS', '').split() + nvcc_compile_argscuda_libs = ['cublas']nvcc_bin = 'nvcc.exe'lib_dir = 'lib/x64'import distutils.msvc9compilerdistutils.msvc9compiler.VERSION = 14.0# Obtain the numpy include directory.  This logic works across numpy versions.try:    numpy_include = np.get_include()except AttributeError:    numpy_include = np.get_numpy_include()cudamat_ext = Extension('D:/Works/PyProj/Eric6/pyMaskrcnnMX/rcnn/mask/gpu_mv', ['D:/Works/PyProj/Eric6/pyMaskrcnnMX/rcnn/mask/gpu_mv.cu'],                        language='c++',                        libraries=cuda_libs,                        extra_compile_args=nvcc_compile_args,                        include_dirs=[numpy_include, 'C:\\Programming\\CUDA\\v8.0\\include'])class CUDA_build_ext(build_ext):    """    Custom build_ext command that compiles CUDA files.    Note that all extension source files will be processed with this compiler.    """    def build_extensions(self):        self.compiler.src_extensions.append('.cu')        self.compiler.set_executable('compiler_so', 'nvcc')        self.compiler.set_executable('linker_so', 'nvcc --shared')        if hasattr(self.compiler, '_c_extensions'):            self.compiler._c_extensions.append('.cu')  # needed for Windows        self.compiler.spawn = self.spawn        build_ext.build_extensions(self)    def spawn(self, cmd, search_path=1, verbose=0, dry_run=0):        """        Perform any CUDA specific customizations before actually launching        compile/link etc. commands.        """        if (sys.platform == 'darwin' and len(cmd) >= 2 and cmd[0] == 'nvcc' and                cmd[1] == '--shared' and cmd.count('-arch') > 0):            # Versions of distutils on OSX earlier than 2.7.9 inject            # '-arch x86_64' which we need to strip while using nvcc for            # linking            while True:                try:                    index = cmd.index('-arch')                    del cmd[index:index+2]                except ValueError:                    break        elif self.compiler.compiler_type == 'msvc':            cmd[:1] = ['nvcc', '--compiler-bindir',                       os.path.dirname(find_executable("cl.exe", PATH))                       or cmd[0]]            # - Secondly, we fix a bunch of command line arguments.            for idx, c in enumerate(cmd):                # create .dll instead of .pyd files                #if '.pyd' in c: cmd[idx] = c = c.replace('.pyd', '.dll')  #20160601, by MrX                # replace /c by -c                if c == '/c': cmd[idx] = '-c'                # replace /DLL by --shared                elif c == '/DLL': cmd[idx] = '--shared'                # remove --compiler-options=-fPIC                elif '-fPIC' in c: del cmd[idx]                # replace /Tc... by ...                elif c.startswith('/Tc'): cmd[idx] = c[3:]                # replace /Fo... by -o ...                elif c.startswith('/Fo'): cmd[idx:idx+1] = ['-o', c[3:]]                # replace /LIBPATH:... by -L...                elif c.startswith('/LIBPATH:'): cmd[idx] = '-L' + c[9:]                # replace /OUT:... by -o ...                elif c.startswith('/OUT:'): cmd[idx:idx+1] = ['-o', c[5:]]                # remove /EXPORT:initlibcudamat or /EXPORT:initlibcudalearn                elif c.startswith('/EXPORT:'): del cmd[idx]                # replace cublas.lib by -lcublas                elif c == 'cublas.lib': cmd[idx] = '-lcublas'            # - Finally, we pass on all arguments starting with a '/' to the            #   compiler or linker, and have nvcc handle all other arguments            if '--shared' in cmd:                pass_on = '--linker-options='                # we only need MSVCRT for a .dll, remove CMT if it sneaks in:                cmd.append('/NODEFAULTLIB:libcmt.lib')            else:                pass_on = '--compiler-options='            cmd = ([c for c in cmd if c[0] != '/'] +                   [pass_on + ','.join(c for c in cmd if c[0] == '/')])            # For the future: Apart from the wrongly set PATH by Anaconda, it            # would suffice to run the following for compilation on Windows:            # nvcc -c -O -o <file>.obj <file>.cu            # And the following for linking:            # nvcc --shared -o <file>.dll <file1>.obj <file2>.obj -lcublas            # This could be done by a NVCCCompiler class for all platforms.        spawn(cmd, search_path, verbose, dry_run)setup(name="mask_voting_gpu",      description="Performs linear algebra computation on the GPU via CUDA",      ext_modules=[cudamat_ext],      cmdclass={'build_ext': CUDA_build_ext},)

出现错误:

LINK : fatal error LNK1181: 无法打开输入文件“ID=2.obj”

解决方法: