在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
Issues when cross compiling helloworld Windows executable on Linux with Clang / OLLVM
我在Linux/Ubuntu系统上使用Clang/OLLVM编译Windows应用程序时遇到问题,我知道我"可以"为此使用其他工具(MinGW等(,但我想这样做,因为我想使用OLLVM提供的混淆。但是,我感觉Clang/LLVM在交叉编译(在Linux系统上编译Windows可执行文件(方面具有非常轻的文档,并且正确设置是某种黑魔法:-(。
我已经构建了这个项目:
https://github.com/qtfreet00/llvm-obfuscator
我已经做了以下工作,老实说,我不明白这些标志中的大多数实际上意味着什么,因为有些标志似乎完全没有记录:
https://nosubstance.me/post/coding-windows-cpp-on-linux/
而且我似乎已经走到了死胡同(区分大小写的问题包括使用<>而不是我修复的"等(,但现在我被困在似乎相当微不足道的事情上。当我尝试使用以下标志进行构建时:
/home/puss/dev/clang-llvm-build/bin/clang -isystem "/home/puss/dev/ewdk/program files/windows kits/10/include/10.0.19041.0/km/crt" -isystem "/home/puss/dev/ewdk-insensitive/program files/windows kits/10/include/10.0.19041.0/shared" -isystem "/home/puss/dev/ewdk-insensitive/program files/windows kits/10/include/10.0.19041.0/ucrt" -isystem "/home/puss/dev/ewdk-insensitive/program files/windows kits/10/include/10.0.19041.0/um" -isystem "/home/puss/dev/msf-http-stager/header" -target i386-pc-windows-msvc -x c++ -fsyntax-only -ferror-limit=64 -fms-compatibility-version=19 -Wno-everything -Wno-unknown-pragmas -U__clang__ -U__clang_version__ -U__clang_major__ -U__clang_minor__ -U__clang_patchlevel__ -fms-extensions -std=c++14 -mllvm -bcf -x c++ -c /tmp/hello.cpp -o hello.o
我的 hello.cpp 文件如下所示:
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
这是我得到的错误:
/tmp/hello.cpp:4:5: error: use of undeclared identifier 'std'
std::cout << "Hello World!";
^
1 error generated.
我在这里确实有iostream标头,编译器应该知道它,因为我使用指向它的-isystem标志指定了它:
/home/puss/dev/ewdk/program files/windows kits/10/include/10.0.19041.0/km/crt/iostream
似乎我的问题与此类似:
https://github.com/JuliaInterop/Cxx.jl/issues/114
关于这里发生了什么的任何想法?我还尝试拉出完全相同的 EWDK,如下所述:
https://nosubstance.me/post/coding-windows-cpp-on-linux/
但是当我在我的 hello.cpp 文件上运行它时:
#!/bin/sh
/home/william/dev/clang-llvm-build/bin/clang -x c++
--target=i386-pc-windows-msvc
-fsyntax-only
-ferror-limit=64
-fms-compatibility-version=19
-Wall
-Wextra
-Wno-unknown-pragmas
-U__clang__
-U__clang_version__
-U__clang_major__
-U__clang_minor__
-U__clang_patchlevel__
-DWIN32
-D_WINDOWS
-DNDEBUG
-D_MT
-D_X86_=1
-DNOMINMAX
-D_WIN32_WINNT=0x0501
-DWIN32_LEAN_AND_MEAN=1
-D_CRT_SECURE_NO_WARNINGS=1
-nostdinc
-isystem '/home/william/dev/ewdk1703-insensitive/program files/windows kits/10/include/10.0.15063.0/shared'
-isystem '/home/william/dev/ewdk1703-insensitive/program files/windows kits/10/include/10.0.15063.0/ucrt'
-isystem '/home/william/dev/ewdk1703-insensitive/program files/windows kits/10/include/10.0.15063.0/um'
-isystem '/home/william/dev/ewdk1703-insensitive/program files/microsoft visual studio 14.0/vc/include'
-isystem '/home/william/dev/ewdk1703-insensitive/program files/windows kits/10/include/10.0.15063.0/km/crt'
-c '/tmp/hello.cpp' -o 'hello.obj'
我还收到与"std"相关的错误:
/tmp/hello.cpp:4:5: error: use of undeclared identifier 'std'
std::cout << "Hello World!";
^
1 error generated.
奇怪的是,iostream.h
标题在这里("km"(:
'/home/william/dev/ewdk1703-insensitive/program files/windows kits/10/include/10.0.15063.0/km/crt'
这似乎与内核驱动程序比用户模式应用程序更相关。
我终于能够解决这个问题,似乎这是一个使用的问题:
<iostream> vs <iostream.h>
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 在Windows中以.exe的形式运行c++
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 无法在windows控制台中为C++程序提供必要的输入
- 在Windows中查找扬声器输出的当前音量级别
- Windows.h与GLFW.h的接口
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 在Windows VS2010上构建NaoQI C++SDK示例项目helloworld时出错