我正在尝试使用 Visual Studio 2017 构建工具(在 x64 系统上)中的 Clang/C2 编译器构建一个简单的“空主”应用程序。我已经按照建议启动了 ...\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat
shell,但意识到它没有将路径添加到 clang.exe编译器,所以 clang
不可用。手动添加路径(x64 托管版本),因此也可以调用 clang
。
尝试使用一个简单的空主函数主体构建最简单的程序会导致以下错误:
clang hello.cc -o hello.exe
error: failed to load c2 (file not found)
c2.dll 是 clang 应该引入链接的 MS 链接器,但它似乎找不到它。
我曾尝试从 IDE 本身构建相同的程序并且它显然是成功的,因为 IDE 分别调用编译器而不是链接器(即它不依赖编译器调用链接器,而是调用链接器。直接执行)
有人知道如何让 clang/c2 编译器正常工作吗?(以前我可以用 Visual Studio 2015 做同样的事情)
最佳答案
问题是 Clang 太笨了,无法在 Windows 中找到 link.exe,尽管它在 PATH
中。
解决方案是使用 MKLINK
命令在 clang.exe 可执行文件旁边创建指向 link.exe 的符号链接(symbolic link):
cd "c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\ClangC2\14.10.25903\bin\HostX64"
mklink link.exe "c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64\link.exe"
cd "c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\ClangC2\14.10.25903\bin\HostX86"
mklink link.exe "c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.10.25017\bin\HostX86\x86\link.exe"
上述解决方案是 hackish,可能需要管理员权限,并假设交联器与本地交联器兼容。
关于c++ - 如何从命令行使用 Visual Studio 2017 Codegen ClangC2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051353/