我有一个在Linux(Ubuntu)主机上运行Windows XP客户系统的Oracle Virtual Box安装。我将来在某个方面的意图是为XP客户系统上的程序编译C ++ DLL。我的问题是:我是否必须在Virtual Box上的XP客户系统上安装IDE / C ++编译器,还是可以在Linux主机上安装一个(或使用gcc ++)?我宁愿不必安装在Virtual Box上的XP客户系统上。我在想,也许像Code:blocks这样的跨平台编译器可用于在Linux上编译,并将生成的DLL放入共享文件夹,以便在XP客户机系统上编写的程序可以访问它。
答案 0 :(得分:1)
这取决于这个Windows程序是什么:它是/它是用Visual C ++构建的?或者它是用GCC / Mingw32构建的?如果它是用Visual C ++构建的,那么使用gcc为它构建DLL是行不通的(由于编译器之间的名称不同,以及MS VC ++ Runtime与libstdc ++中的不同标准库实现)。
如果您按照指示在Linux上通过code :: blocks进行交叉编译,就像在此链接(link to some directions或more general instructions in their forum)中一样,您将使用mingw32,它依赖于gcc和的libstdc ++
答案 1 :(得分:1)
您的Linux发行版可能提供mingw
个包,其中包含gcc / g ++等,并允许它作为Windows的交叉编译器。简而言之,您可以从Linux for Windows构建Windows可执行文件(包括EXE和DLL)。
您不一定需要IDE(在Linux上)才能实现此目的。您可以配置IDE以使用交叉编译器;你可以从autoconf的configure脚本中完成它,你可以从你自己的makefile中完成它。您需要的是正确的包含/库搜索路径以及正确的二进制文件。
这些位置在逐个系统的基础上是不同的。通常,编译器位于/usr/bin/triple-name
中,因此对我来说,我的实际gcc名为x86_64-redhat-linux-gcc
,而我的mingw二进制文件为x86_64-pc-mingw32-gcc
。您需要使用特定于Windows /交叉编译的这些工具,而不是内置的默认值;你还需要dlltool这是一个生成dll的工具。