【问题标题】:Building LLVM using Visual Studio使用 Visual Studio 构建 LLVM
【发布时间】:2014-12-29 18:18:10
【问题描述】:

我正在尝试使用 Visual Studio 2012(版本 10.0)构建 LLVM。我已经安装了 CMake 并运行了以下命令:

  1. svn cohttp://llvm.org/svn/llvm-project/llvm/trunkllvm
  2. cd llvm\tools
  3. svn cohttp://llvm.org/svn/llvm-project/cfe/trunkclang
  4. cd ....
  5. mkdir 构建
  6. cd 构建
  7. cmake -G "Visual Studio 10" ..\llvm

运行这些命令可以正常运行,直到最后一步。我收到大量警告(?),如下所示:

-- Looking for dirent.h
-- Looking for dirent.h - not found
-- Looking for dlfcn.h
-- Looking for dlfcn.h - not found
-- Looking for errno.h
-- Looking for errno.h - found
-- Looking for execinfo.h
-- Looking for execinfo.h - not found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - not found
-- Looking for limits.h
-- Looking for limits.h - found
-- Looking for link.h
-- Looking for link.h - not found
-- Looking for malloc.h
-- Looking for malloc.h - found
-- Looking for malloc/malloc.h
-- Looking for malloc/malloc.h - not found
-- Looking for ndir.h
-- Looking for ndir.h - not found
-- Looking for signal.h
-- Looking for signal.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for sys/dir.h
-- Looking for sys/dir.h - not found
-- Looking for sys/ioctl.h
-- Looking for sys/ioctl.h - not found
-- Looking for sys/mman.h
-- Looking for sys/mman.h - not found
-- Looking for sys/ndir.h
-- Looking for sys/ndir.h - not found
-- Looking for sys/param.h
-- Looking for sys/param.h - not found
-- Looking for sys/resource.h
-- Looking for sys/resource.h - not found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - not found
-- Looking for sys/uio.h
-- Looking for sys/uio.h - not found
-- Looking for sys/wait.h
-- Looking for sys/wait.h - not found
-- Looking for termios.h
-- Looking for termios.h - not found
-- Looking for unistd.h
-- Looking for unistd.h - not found
-- Looking for utime.h
-- Looking for utime.h - not found
-- Looking for valgrind/valgrind.h
-- Looking for valgrind/valgrind.h - not found
-- Looking for zlib.h
-- Looking for zlib.h - not found
-- Looking for fenv.h
-- Looking for fenv.h - not found
-- Looking for FE_ALL_EXCEPT
-- Looking for FE_ALL_EXCEPT - not found
-- Looking for FE_INEXACT
-- Looking for FE_INEXACT - not found
-- Looking for mach/mach.h
-- Looking for mach/mach.h - not found
-- Looking for mach-o/dyld.h
-- Looking for mach-o/dyld.h - not found
-- Performing Test HAVE_CXXABI_H
-- Performing Test HAVE_CXXABI_H - Failed
-- Looking for arc4random
-- Looking for arc4random - not found
-- Looking for backtrace
-- Looking for backtrace - not found
-- Looking for getpagesize
-- Looking for getpagesize - not found
-- Looking for getrusage
-- Looking for getrusage - not found
-- Looking for setrlimit
-- Looking for setrlimit - not found
-- Looking for isatty
-- Looking for isatty - not found
-- Looking for isinf
-- Looking for isinf - not found
-- Looking for isinf
-- Looking for isinf - not found
-- Looking for finite
-- Looking for finite - not found
-- Looking for isnan
-- Looking for isnan - not found
-- Looking for isnan
-- Looking for isnan - not found
-- Looking for ceilf
-- Looking for ceilf - found
-- Looking for floorf
-- Looking for floorf - found
-- Looking for fmodf
-- Looking for fmodf - found
-- Looking for log
-- Looking for log - found
-- Looking for log2
-- Looking for log2 - not found
-- Looking for log10
-- Looking for log10 - found
-- Looking for exp
-- Looking for exp - found
-- Looking for exp2
-- Looking for exp2 - not found
-- Looking for exp10
-- Looking for exp10 - not found
-- Looking for futimens
-- Looking for futimens - not found
-- Looking for futimes
-- Looking for futimes - not found
-- Looking for nearbyintf
-- Looking for nearbyintf - not found
-- Looking for mallinfo
-- Looking for mallinfo - not found
-- Looking for malloc_zone_statistics
-- Looking for malloc_zone_statistics - not found
-- Looking for mkdtemp
-- Looking for mkdtemp - not found
-- Looking for mkstemp
-- Looking for mkstemp - not found
-- Looking for mktemp
-- Looking for mktemp - not found
-- Looking for closedir
-- Looking for closedir - not found
-- Looking for opendir
-- Looking for opendir - not found
-- Looking for readdir
-- Looking for readdir - not found
-- Looking for getcwd
-- Looking for getcwd - not found
-- Looking for gettimeofday
-- Looking for gettimeofday - not found
-- Looking for getrlimit
-- Looking for getrlimit - not found
-- Looking for posix_spawn
-- Looking for posix_spawn - not found
-- Looking for pread
-- Looking for pread - not found
-- Looking for realpath
-- Looking for realpath - not found
-- Looking for sbrk
-- Looking for sbrk - not found
-- Looking for srand48
-- Looking for srand48 - not found
-- Looking for strtoll
-- Looking for strtoll - not found
-- Looking for strtoq
-- Looking for strtoq - not found
-- Looking for strerror
-- Looking for strerror - found
-- Looking for strerror_r
-- Looking for strerror_r - not found
-- Looking for strerror_s
-- Looking for strerror_s - found
-- Looking for setenv
-- Looking for setenv - not found
-- Looking for _chsize_s
-- Looking for _chsize_s - found
-- Looking for _alloca
-- Looking for _alloca - not found
-- Looking for __alloca
-- Looking for __alloca - not found
-- Looking for __chkstk
-- Looking for __chkstk - not found
-- Looking for ___chkstk
-- Looking for ___chkstk - not found
-- Looking for __ashldi3
-- Looking for __ashldi3 - not found
-- Looking for __ashrdi3
-- Looking for __ashrdi3 - not found
-- Looking for __divdi3
-- Looking for __divdi3 - not found
-- Looking for __fixdfdi
-- Looking for __fixdfdi - not found
-- Looking for __fixsfdi
-- Looking for __fixsfdi - not found
-- Looking for __floatdidf
-- Looking for __floatdidf - not found
-- Looking for __lshrdi3
-- Looking for __lshrdi3 - not found
-- Looking for __moddi3
-- Looking for __moddi3 - not found
-- Looking for __udivdi3
-- Looking for __udivdi3 - not found
-- Looking for __umoddi3
-- Looking for __umoddi3 - not found
-- Looking for __main
-- Looking for __main - not found
-- Looking for __cmpdi2
-- Looking for __cmpdi2 - not found
-- Looking for __GLIBC__
-- Looking for __GLIBC__ - not found
-- Performing Test HAVE_INT64_T
-- Performing Test HAVE_INT64_T - Success
-- Performing Test HAVE_UINT64_T
-- Performing Test HAVE_UINT64_T - Success
-- Performing Test HAVE_U_INT64_T
-- Performing Test HAVE_U_INT64_T - Failed
-- Looking for __atomic_fetch_add_4 in atomic
-- Looking for __atomic_fetch_add_4 in atomic - not found
-- Performing Test LLVM_HAS_ATOMICS
-- Performing Test LLVM_HAS_ATOMICS - Success
-- Performing Test SUPPORTS_NO_VARIADIC_MACROS_FLAG
-- Performing Test SUPPORTS_NO_VARIADIC_MACROS_FLAG - Failed
-- Target triple: i686-pc-win32
-- Native target architecture is X86
-- Looking for _strtoi64
-- Looking for _strtoi64 - found
-- Performing Test HAVE_ELMCB_PCSTR
-- Performing Test HAVE_ELMCB_PCSTR - Success
-- Threads enabled.
-- Doxygen disabled.
-- Sphinx disabled.
-- Go bindings disabled.
CMake Error at cmake/modules/HandleLLVMOptions.cmake:41 (message):
  Host Visual Studio must be at least 2012 (MSVC 17.0)
Call Stack (most recent call first):
  CMakeLists.txt:318 (include)


-- Configuring incomplete, errors occurred!
See also "C:/Scratch/Clang/build/CMakeFiles/CMakeOutput.log".
See also "C:/Scratch/Clang/build/CMakeFiles/CMakeError.log".

这些文件位于我的系统上的 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include 下。该命令已完成,但尚未生成文档告诉我应该创建的 LLVM.sln 文件。

有人可以建议如何纠正我遇到的问题吗?感谢您提供的任何指导。

【问题讨论】:

  • 不是“Visual Studio 10”“Visual Studio 2010”而不是 2012 吗? 2012 应该是 11,而 2013 应该是 12。另外我相信 LLVM 现在确实需要 VS2012 或者可能需要 VS2013。他们一直非常积极地升级到新版本,因为他们真的想使用 C++11/C++14 特性,而 VS 支持是阻碍他们前进的主要因素。
  • @bames53 是的,这是我的问题的一部分。在 Linux 领域的时间太多了 :)

标签: visual-studio-2012 cmake llvm


【解决方案1】:

cmake Visual Studio 10 驱动程序适用于 Visual Studio 2010。http://www.cmake.org/cmake/help/v3.0/generator/Visual%20Studio%2010%202010.html

LLVM 和 clang 需要一个可以完成大多数 c++11 事情的编译器。

【讨论】:

    【解决方案2】:

    您需要将 Visual Studio 放在您的路径上。在调用 CMake 之前,必须从命令行运行批处理文件 vcvars32.bat(用于 32 位编译)或 vcvars64.bat(用于 64 位编译)。这会设置所有路径和其他环境变量,以便编译器“可见”。

    在您的系统上,它们在

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat
    

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\vcvars64.bat
    

    【讨论】:

    • 感谢 librik,我现在正在运行脚本,但仍然有一些丢失的文件,但它们是未在先决条件中列出的 POSIX 文件。看起来问题可能是重新配置,这意味着我的目标是错误的 Visual Studio 版本,脚本更正了该版本。看来这次成功了,我会尝试构建项目,一旦完成,他们会更新您。
    • 谢谢伙计,这更正了我的工具链并让一切正常工作。
    • 如何运行批处理文件?我遇到了同样的问题。
    • 启动命令提示符,使用 CD 导航到安装批处理文件的目录(取决于您拥有的 Visual Studio 版本,10.0 表示 VS2010),然后只需键入“vcvars32 .bat”或“vcvars64.bat”
    • 好的,我正在使用 VS 2013 并遵循您的回答和评论,但似乎没有任何效果。我导航到 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64,在命令提示符下运行 vcvarsamd64_x86.bat,将目标设置为 Visual Studio 12 Win64,在 CMake 中使用本机默认值,但得到了相同结果。难道是我在某处俯瞰一步?
    猜你喜欢
    • 2017-05-20
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2011-11-20
    • 2016-07-23
    相关资源
    最近更新 更多