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

Trying to compile YouCompleteMe with mingw-64 and clang support on Windows 7

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

有没有人让这个工作?

  C:\mingw64\bin\g++.exe     -shared -o C:\Users\Daddy007\vimfiles\bundle\YouCompl
eteMe\third_party\ycmd\ycm_core.pyd -Wl,--out-implib,libycm_core.dll.a -Wl,--maj
or-image-version,0,--minor-image-version,0 -Wl,--whole-archive CMakeFiles\ycm_co
re.dir/objects.a -Wl,--no-whole-archive ..\BoostParts\libBoostParts.a C:\Python2
7\libs\libpython27.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -l
oleaut32 -luuid -lcomdlg32 -ladvapi32
CMakeFiles\ycm_core.dir/objects.a(ClangCompleter.cpp.obj):ClangCompleter.cpp:(.t
ext+0x328): undefined reference to `clang_createIndex'
CMakeFiles\ycm_core.dir/objects.a(ClangCompleter.cpp.obj):ClangCompleter.cpp:(.t
ext+0x353): undefined reference to `clang_toggleCrashRecovery'
CMakeFiles\ycm_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: CMakeFiles\ycm_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-rev0
    x86_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
    (必须在 llvm\lib\Target\AMDGPU\SIISelLowering.cpp 中定义 M_PI ,其他一切都很简单)

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

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

    在您的工具链的 ...\mingw-w64\x86_64-5.2.0-posix-seh-rt_v4-rev0\mingw64\bin 文件夹中应该有 gendef 和 dlltool。

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

  • 确保将 ...\mingw-w64\x86_64-5.2.0-posix-seh-rt_v4-rev0\mingw64\bin 添加到 PATH 环境变量,以节省您一些麻烦。

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

    Uncheck BUILD_SHARED_LIBS

    CMAKE_BUILD_TYPE: Release

    确保有关工具链的每个路径都是正确的。 (路径 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-seh-rt_v4-rev0/mingw64

    PYTHON_EXECUTABLE: C:/python27/python.exe
    PYTHON_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:\python27\python.exe'

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

嗯,就是这样,有很多步骤可能会出错,或者我可能错过了一些东西。如果你遇到困难,尽管问我,我可能会帮忙。

只是一个旁注。我还可以推荐使用 Visual Studio 2015 进行构建,这是来自 http://llvm.org/builds/ and Python 2.7.11. Because VS 2015 supports Clang and is compatible with VS2015's VC++ (http://clang.llvm.org/docs/MSVCCompatibility.html 的 LLVM/Clang 的快照构建。

效果也很好。