无法使用 Visual studio 在 Windows 上编译 llvm pass
Unable to compile llvm pass on Windows using Visual studio
我正在学习如何在 Windows 上使用 llvm 工具链。
我使用以下 cmake 命令编译并安装了 llvm
cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_USE_LINKER=lld -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX="C:\llvm" -Thost=x64
运行 INSTALL
解决方案中的项目在c:\llvm
中安装llvm 的build 文件夹中创建。
为了测试我的 llvm 安装,我创建了一个新的 Visual Studio 项目,并在项目根目录中放置了一个 Directory.build.props
文件,内容如下:
<Project>
<PropertyGroup>
<LLVMInstallDir>C:\llvm</LLVMInstallDir>
<LLVMToolsVersion>14.0.0</LLVMToolsVersion>
</PropertyGroup>
</Project>
我在project settings中将project toolchain设置为LLVM (clang-cl)
,成功编译了一个hello world程序
现在我想将 llvm 用于它的预期用途并玩一些通行证。所以我下载了 https://github.com/tsarpaul/llvm-string-obfuscator.
运行 cmake -Bbuild -DLLVM_DIR=C:\llvm\lib\cmake\llvm\
在 .\build
中生成了 Visual Studio 解决方案。
到目前为止这么好我tought。这类似于编译 llvm 本身所需的步骤。
但是 运行 生成的解决方案中的 BUILD_ALL
项目给了我 105 个链接器错误。
我已将整个错误输出粘贴到此处:https://pastebin.com/TAizbAEi。
我感觉 C:\llvm\lib
中所需的库对 Visual Studio 不可见。但我不知道如何进行。任何人都可以指出我如何正确使用 llvm 和 visual studio 的正确方向吗?
通过添加到cmake文件解决:
llvm_map_components_to_libnames(llvm_libs core)
target_link_libraries(LLVMStringObfuscator ${llvm_libs})
现在构建 dll。
我在使用 opt.exe
时仍有问题
PS C:\Users\Administrator\source\repos> C:\llvm\bin\opt.exe -load-pass-plugin=.philip22\llvm-string-obfuscator\build\StringObfuscator\Release\LLVMStringObfuscator.dll -passes="string-obfuscator-pass"
C:\llvm\bin\opt.exe: .philip22\llvm-string-obfuscator\build\StringObfuscator\Release\LLVMStringObfuscator.dll:1:1: error: expected top-level entity
MZÉ ╕ @ ║ ┤ ═!╕L═!This program cannot be run in DOS mode.
但这是另一个线程的新问题:)
我正在学习如何在 Windows 上使用 llvm 工具链。 我使用以下 cmake 命令编译并安装了 llvm
cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_USE_LINKER=lld -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_INSTALL_PREFIX="C:\llvm" -Thost=x64
运行 INSTALL
解决方案中的项目在c:\llvm
中安装llvm 的build 文件夹中创建。
为了测试我的 llvm 安装,我创建了一个新的 Visual Studio 项目,并在项目根目录中放置了一个 Directory.build.props
文件,内容如下:
<Project>
<PropertyGroup>
<LLVMInstallDir>C:\llvm</LLVMInstallDir>
<LLVMToolsVersion>14.0.0</LLVMToolsVersion>
</PropertyGroup>
</Project>
我在project settings中将project toolchain设置为LLVM (clang-cl)
,成功编译了一个hello world程序
现在我想将 llvm 用于它的预期用途并玩一些通行证。所以我下载了 https://github.com/tsarpaul/llvm-string-obfuscator.
运行 cmake -Bbuild -DLLVM_DIR=C:\llvm\lib\cmake\llvm\
在 .\build
中生成了 Visual Studio 解决方案。
到目前为止这么好我tought。这类似于编译 llvm 本身所需的步骤。
但是 运行 生成的解决方案中的 BUILD_ALL
项目给了我 105 个链接器错误。
我已将整个错误输出粘贴到此处:https://pastebin.com/TAizbAEi。
我感觉 C:\llvm\lib
中所需的库对 Visual Studio 不可见。但我不知道如何进行。任何人都可以指出我如何正确使用 llvm 和 visual studio 的正确方向吗?
通过添加到cmake文件解决:
llvm_map_components_to_libnames(llvm_libs core)
target_link_libraries(LLVMStringObfuscator ${llvm_libs})
现在构建 dll。
我在使用 opt.exe
PS C:\Users\Administrator\source\repos> C:\llvm\bin\opt.exe -load-pass-plugin=.philip22\llvm-string-obfuscator\build\StringObfuscator\Release\LLVMStringObfuscator.dll -passes="string-obfuscator-pass"
C:\llvm\bin\opt.exe: .philip22\llvm-string-obfuscator\build\StringObfuscator\Release\LLVMStringObfuscator.dll:1:1: error: expected top-level entity
MZÉ ╕ @ ║ ┤ ═!╕L═!This program cannot be run in DOS mode.
但这是另一个线程的新问题:)