我尝试了许多不同的配置选项,我已经用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-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
(必须在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/mingw64PYTHON_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: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)兼容。
效果也很好。