尝试在 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 的快照构建。
效果也很好。
我尝试了很多不同的配置选项,我用 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/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:\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 的快照构建。
效果也很好。