尝试在 Windows 7 上使用 mingw-64 编译 YouCompleteMe 和 clang 支持



我尝试了许多不同的配置选项,我已经用Windows和mingw-64构建了llvm/clang,但无论我设置什么,我总是停在这里。 由于没有官方支持,唯一的帮助是很久没有更新的 wiki 文档。

有没有人让这个工作?

C:mingw64bing++.exe     -shared -o C:UsersDaddy007vimfilesbundleYouCompl
eteMethird_partyycmdycm_core.pyd -Wl,--out-implib,libycm_core.dll.a -Wl,--maj
or-image-version,0,--minor-image-version,0 -Wl,--whole-archive CMakeFilesycm_co
re.dir/objects.a -Wl,--no-whole-archive ..BoostPartslibBoostParts.a C:Python2
7libslibpython27.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -l
oleaut32 -luuid -lcomdlg32 -ladvapi32
CMakeFilesycm_core.dir/objects.a(ClangCompleter.cpp.obj):ClangCompleter.cpp:(.t
ext+0x328): undefined reference to `clang_createIndex'
CMakeFilesycm_core.dir/objects.a(ClangCompleter.cpp.obj):ClangCompleter.cpp:(.t
ext+0x353): undefined reference to `clang_toggleCrashRecovery'
CMakeFilesycm_core.dir/objects.a(ClangCompleter.cpp.obj):ClangCompleter.cpp:(.t
ext+0x3ea): undefined reference to `clang_disposeIndex'
c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw3
2/bin/ld.exe: CMakeFilesycm_core.dir/objects.a(ClangCompleter.cpp.obj): bad rel
oc address 0x0 in section `.data'
collect2.exe: error: ld returned 1 exit status

对我有用的步骤如下。 确保对所有步骤使用 32 位或 64 位,但切勿混合使用它们。在说明中将有一些路径,具体取决于您的安装。确保你调整它们,而不仅仅是尝试复制粘贴。

  • 获取GVim(针对Python构建,您可以在版本中检查。必须有一个条目 +python/dyn)

    (对于始终最新的版本,我可以推荐:https://tuxproject.de/projects/vim/)

  • 获取 mingw-w64 工具链。

    由于您的问题,我不确定您得到了什么版本,但在我看来,mingw-w64 是可用的更好的工具链之一。

    在线安装程序可在此处获得(mingw-w64-install.exe):
    http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/

    我在构建 YCM 期间使用的版本: (启动安装程序后,您将看到这些名称的含义。

    x86_64-5.2.0-posix-seh-rt_v4-rev0x86_64-5.3.0-posix-seh-rt_v4-rev0

  • 获取 cmake:
    https://cmake.org/

  • 获取 Python 2.7.x
    https://www.python.org/downloads/

    最好的方法是使用 2.7.10,因为 2.7.11 有效,但由于 https://bugs.python.org/issue25824 需要在注册表中进行修复

  • 由于您已经编译了LLVM/Clang,因此您可以跳过此步骤。如果您使用上述工具链,请重新构建它。 (这是获得libclang.dll语义支持所必需的。

    获取 LLVM/Clang 源代码: http://llvm.org/docs/GettingStarted.html
    (必须在llvmlibTargetAMDGPUSIISelLowering.cpp中定义M_PI,其他一切都很简单)

  • 获取 YouCompleteMe 资源
    git clone https://github.com/Valloric/YouCompleteMe
    cd YouCompleteme
    git submodule update --init --recursive

  • 生成libpython27.a
    C:Python27libslibpython27.a丢失了,所以我不得不创建这个。如果你有它,你可能仍然想创建这个只是为了确定。

    在工具链的...mingw-w64x86_64-5.2.0-posix-seh-rt_v4-rev0mingw64bin文件夹中,应该有gendef和dlltool。

    转到你的python27.dll并运行(从命令行):
    gendef python27.dll
    dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a

  • 确保将...mingw-w64x86_64-5.2.0-posix-seh-rt_v4-rev0mingw64bin添加到PATH环境变量中,以节省一些麻烦。

  • 启动 cmake-gui 并配置
    生成器将是: MinGW Makefiles 源代码在哪里:.../YouCompleteMe/third_party/ycmd/cpp
    在哪里构建二进制文件:.../build

    Uncheck BUILD_SHARED_LIBS

    CMAKE_BUILD_TYPE: Release

    确保有关工具链的每个路径都是正确的。 (Path to ld.exe, g++.exe, mingw32-make, objcopy, ...)

    在哪里放置构建的文件:CMAKE_INSTALL_PREFIX
    无论您想要什么,您都不会在那里找到必要的文件:)。

    接下来的变量取决于您对 Clang 的安装。
    EXTERNAL_LIBCLANG_PATH:指向您之前使用相同的工具链
    构建的libclang.dll(.../mingw-w64/x86_64-5.2.0-posix-seh-rt_v4-rev0/mingw64/bin/libclang.dll)

    PATH_TO_LLVM_ROOT: .../mingw-w64/x86_64-5.2.0-posix-she-rt_v4-rev0/mingw64


    PYTHON_EXECUTABLE: C:/python27/python.exePYTHON_INCLUDE_DIR: C:/python27/include
    PYTHON_LIBRARY: C:/python27/libs/libpython27.a (the one you created earlier)

    检查USE_CLANG_COMPLETER(用于语义支持)

    按配置并生成。

    现在,您应该在cmake顶部指定的路径中找到Makefile。 (在哪里构建二进制文件:)

  • 建立 YCM

    打开命令行并导航到目录并输入mingw32-make。 构建很可能会在达到 100% 之前失败,您唯一需要的是达到 90% 左右。我认为它也试图编译测试并失败了。

    如果导航到...\YouCompleteMe\third_party\ycmd,则应该有以下文件

    • ycm_core.pyd
    • ycm_client_support.pyd
    • libclang.dll

    如果他们在那里,很幸运。

    您现在可以将...YouCompleteMe*中的文件夹复制到gvim文件夹中,以检查它是否有效。

    在您的_vimrc中,您可以指定:
    let g:ycm_path_to_python_interpreter = 'C:python27python.exe'

    要将 YCM 指向正确的解释器,如果您有多个安装 (3.5),则可能会产生问题,具体取决于 PATH 上的哪个。

好吧,就是这样,有很多步骤可能会出错,或者我可能错过了什么。如果你遇到困难,只要问我能帮忙。

只是一个旁注。我还可以推荐使用 Visual Studio 2015 构建,这是来自 http://llvm.org/builds/和 Python 2.7.11 的 LLVM/Clang 的快照构建。因为VS 2015支持Clang,并且与VS2015的VC++(http://clang.llvm.org/docs/MSVCCompatibility.html)兼容。

效果也很好。

最新更新