Visual Studio 2017编译LLVM7.0

本文详细介绍在Win7 64位环境下,使用Visualstudio2017和WindowsKits10.0.14393.0,通过CMake配置并编译LLVM 7.0及其相关组件的全过程。涵盖源码下载、编译环境搭建、编译过程及常见错误调试,如Compiler-RT、ClangDaemon和OpenMP等问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、编译环境

Win7 64位

Visual studio 2017 15.6

Windows Kits 10.0.14393.0

 

2、源码

http://releases.llvm.org/download.html#7.0.0

2.1 llvm

llvm-7.0.0.src.tar.xz

解压至llvm

2.2 Clang

cfe-7.0.0.src.tar.xz

解压重新命名为:clang

放入:llvm/tools

2.3 clang-extra

clang-tools-extra-7.0.0.src.tar.xz

解压重新命名为:extra

放入:llvm/tools/clang/tools

2.4 LLD linker

lld-7.0.0.src.tar.xz

解压重新命名为:lld

放入:llvm/tools

2.5 Polly Loop Optimizer

lld-7.0.0.src.tar.xz

解压重新命名为:polly

放入:llvm/tools

2.6 Compiler-RT

compiler-rt-7.0.0.src.tar.xz

解压重新命名为:compiler-rt

放入:llvm/projects

2.7 Libomp

openmp-7.0.0.src.tar.xz

解压重新命名为:openmp

放入:llvm/projects

2.8 libcxx and libcxxabi

libcxx-7.0.0.src.tar.xz

libcxxabi-7.0.0.src.tar.xz

解压重新命名为:libcxx 、libcxxabi

放入:llvm/projects

2.9 Test Suite Source Code

test-suite-7.0.0.src.tar.xz

解压重新命名为:test-suite

放入:llvm/projects

 

3、编译准备

3.1 安装CMake

cmake-3.12.3-win32-x86.zip

最低版本要求:3.4.3

3.2 安装python

添加PATH

3.3 安装perl

strawberry-perl-5.28.0.1-32bit.msi

添加PATH

3.4 生成sln

用CMake生成sln

 

4、编译

打开LLVM.sln,建议先查看5修正错误,选择ALL_BUILD生成即可。

 

5、调试错误解决

5.1 clang_rt.asan-dynamic-i386

Windows下,Compiler-RT Libraries\RTAsan.i386\asan_malloc_win.cc

中无MemalignFromLocalPool()函数,添加一个空的。

void* MemalignFromLocalPool(uptr alignment, uptr size) {

return NULL;

}

解决问题。当然空函数对程序的影响未知。

5.2 clangDaemon

Clang libraries\clangDaemon\CodeComplete.h

 

将文件编码另存为:

解决问题。

5.3 OMP

后期生成事件语句错误:

setlocal

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E make_directory E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/common.50/include

if %errorlevel% neq 0 goto :cmEnd

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E copy omp.h E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/common.50/include

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

setlocal

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E make_directory E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/win_32.50/lib

if %errorlevel% neq 0 goto :cmEnd

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E copy E:/LLVM/dist/bin/libomp.dll E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/win_32.50/lib

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

将标红部分修改为:

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E copy E:/LLVM/dist/bin/$(ConfigurationName)/libomp.dll

5.4 ompip

A、包含库路径错误

由于项目文件中:libomp.dll.lib路径有误。

删除相应的文件,按如下目录添加,或修改

dist\projects\openmp\runtime\src\ompimp.vcxpro文件中:

<Object Include="E:\LLVM\dist\lib\Debug\libomp.dll.lib" />

B、后期生成事件语句错误

setlocal

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E make_directory E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/win_32.50/lib

if %errorlevel% neq 0 goto :cmEnd

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E copy E:/LLVM/dist/lib/libomp.lib E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/win_32.50/lib

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

将标红部分修改为:

E:\LLVM\cmake-3.12.3-win32-x86\cmake-3.12.3-win32-x86\bin\cmake.exe -E copy E:/LLVM/dist/lib/$(ConfigurationName)/libomp.lib E:/LLVM/llvm-7.0.0.src/projects/openmp/runtime/exports/win_32.50/lib

Visual Studio 中测试 LLVM 可以通过以下步骤进行: 1. **安装 LLVM**: - 首先,从 LLVM 官方网站下载适合您操作系统的预编译二进制文件或源代码。 - 如果您下载的是源代码,需要使用 CMake 和 Visual Studio 进行编译。打开“开发者命令提示符”,导航到 LLVM 源代码目录,运行以下命令: ```sh mkdir build cd build cmake -G "Visual Studio 16 2019" .. cmake --build . --config Release ``` 2. **配置环境变量**: - 将 LLVM 的 `bin` 目录添加到系统的 `PATH` 环境变量中,以便在命令行中直接调用 LLVM 工具。 3. **创建 Visual Studio 项目**: - 打开 Visual Studio,创建一个新的 C++ 项目。 - 在项目属性中,配置包含目录和库目录,指向 LLVM 的 `include` 和 `lib` 目录。 - 在链接器设置中,添加必要的 LLVM 库,例如 `LLVMXCore.a`、`LLVMScalarOpts.a` 等。 4. **编写测试代码**: - 在项目中编写一个简单的 C++ 程序,使用 LLVM 的 API。例如,一个简单的 LLVM 模块生成代码: ```cpp #include "llvm/IR/IRBuilder.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/Verifier.h" int main() { llvm::LLVMContext Context; llvm::Module* Module = new llvm::Module("test", Context); llvm::IRBuilder<> Builder(Context); llvm::FunctionType* FunctionType = llvm::FunctionType::get(Builder.getVoidTy(), false); llvm::Function* Function = llvm::Function::Create(FunctionType, llvm::Function::ExternalLinkage, "main", Module); llvm::BasicBlock* BasicBlock = llvm::BasicBlock::Create(Context, "entry", Function); Builder.SetInsertPoint(BasicBlock); Builder.CreateRetVoid(); llvm::verifyFunction(*Function); Module->print(llvm::outs(), nullptr); delete Module; return 0; } ``` 5. **编译和运行**: - 编译项目并运行。如果一切配置正确,您将看到生成的 LLVM IR 代码输出。 6. **调试和测试**: - 使用 Visual Studio 的调试工具,调试您的 LLVM 代码,确保其按预期工作。 通过这些步骤,您可以在 Visual Studio 中成功测试 LLVM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值