【问题标题】:Compile linux gcc in windows - nvcc in windows在windows中编译linux gcc——windows中的nvcc
【发布时间】:2014-03-26 21:35:53
【问题描述】:

这是一个有趣的问题,如果得到肯定的回答,将使交叉编译变得容易得多。

由于 gcc 是用 C++ 编写的,是否可以在 Windows MinGW G++ 或 VSC++ 编译器上重新编译 Linux gcc 编译器,以便生成的 Windows 可执行文件能够将 c 代码编译为 linux 程序?

如果是这样,需要做什么?

所以为了简化,这就是我想要做的。

mingw32-g++ gcc.cpp -o gcc.exe

该命令可能不起作用,因为如果它那么容易的话,它可能已经完成了。我要问的是这个概念是否可行。

编辑:感谢并将问题扩展到 NVCC

fvu 能够回答 gcc 编译器的问题(请下次使用回答按钮),所以如果你有同样的问题,你可以感谢他(或她)。

作为问题的延伸,是否可以编辑或重新编译 nvcc 或它使用的东西,以便 nvcc.exe 可以从 CUDA C 代码创建 linux 程序?我读到 nvcc 的 windows 变体只能使用 Visual Studio cl.exe 而不能使用 MinGW 或 CygWin。

是否可以使用 cl.exe 创建 linux 程序?如果是这样,它可以用来生成带有 nvcc.exe 的 linux 程序吗?

【问题讨论】:

  • 阅读 gcc 手册中关于交叉编译的章节。从来没有走你描述的确切路线,但我已经在 Windows 下构建了针对 ARM9 嵌入式 Linux 机器的工具链,就像一个魅力 - 使用 cygwin btw。看here 进行温和的介绍。还有very useful info here
  • @fvu 非常感谢!您提供的链接甚至有一个可下载的编译器可供使用。请参阅问题的编辑以了解此问题的扩展。
  • 不客气 - 因为我不确定是否符合您的要求,所以我刚刚发表了评论。
  • afaik,您可以只创建已编译的 CUDA 内核(PTX - 这是 CUDA 运行时部分的字节码;nvcc -ptx your.cu),然后使用 gcc 编写和编译 cuda 主机代码,并带有可加载的 ptx (通过cuModuleLoad + cuModuleGetFunction example 加载ptx)。有关于分离设备和主机代码的cuda手册:cuda-compiler-driver-nvcc using-separate-compilation-in-cuda docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/…
  • 奇怪,到目前为止我还以为已经有适用于 Windows 的 GCC 版本。可能我听说刚刚在 cygwin 中部署 GCC

标签: linux windows gcc compiler-construction nvcc


【解决方案1】:

阅读 gcc 手册中关于交叉编译的章节,gcc 的架构使得设置目标与开发机器不同的工具链非常容易。

我从来没有走你描述的确切路线,但我已经在 Windows 下构建了针对 ARM9 嵌入式 Linux 机器的工具链,就像一个魅力 - 使用 cygwin btw。请看here 以获得温和的介绍。也非常有用的信息here

我不会评论关于 nvcc 可以做些什么,CUDA 在我(长)的东西列表中的某个地方...

现在,cl 可以生成 Linux 二进制文件吗?这个问题的答案是“有点”:只要目标处理器来自 cl 支持的处理器系列,它生成的目标文件可能不应该包含任何会阻止其在 Linux 上执行的内容,因为它们会只包含机器代码。这就是理论。然而:

  • 由于 Linux 使用另一种可执行格式,您将需要一个 Windows 托管的链接器,该链接器可以理解 Windows 风格的目标文件(afaik、COFF),并将它们链接到一个 Linux 风格的 (ELF) 可执行文件。我从来没有听说过这样的野兽,虽然理论上它可能存在
  • 启动代码(一个围绕 main 函数的小程序)也会有所不同,需要编写
  • 还有更多,例如图书馆相关问题

所以,实用的答案是否定的,尽管对于无聊的学生来说这可能是一个不错的暑期项目:)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2015-02-22
相关资源
最近更新 更多