Are there any user friendly tools out there to cross-compile from Windows to Linux?
crosstool-ng supports building cross-compilers with cygwin host.
Overview:
- Install cygwin, with development packages
- Download
crosstool-ng
- Extract the tarball (
tar xvjf crosstool-ng*
) - Run
./configure
- When configure complains about a missing tool, go back to cygwin setup and install the corresponding package (e.g.
flex
,libtool
,ncurses-devel
) You'll need at least the following:- Devel/gperf
- Devel/bison
- Devel/byacc
- Devel/wget
- Devel/patch
- Devel/make (GNU version)
- Devel/automake 1.10+
- Libs/libncursesw10
- Libs/libncursesw10-devel
make
make install
- Create a new directory for building the cross-compiler, e.g.
/usr/src/cross-linux-gnu-root
- Enable system-wide case sensitivity support in the registry (see https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem#answer-842670)
- Mount the directory case-sensitive (e.g.
mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1
) - From inside the cross-compiler build directory,
ct-ng menuconfig
- In the menus, set target architecture to
x86
(probably) and subarchitecture toi686
(avoids GCC 4.8 issues, thanks osm0sis), target kernel tolinux
, and target C library toglibc
, and enable the C++ compiler. - To work around make 4.0 issues, also enable EXPERIMENTAL in
Paths and misc options
then, go inCompanion tools
(at top-level) and enableBuild some companion tools
and thenmake 3.81
(Thanks osm0sis) - wget has issues with the latest kernel.org certificates so use the .wgetrc method in this accepted answer: How do I fix certificate errors when running wget on an HTTPS URL in Cygwin? (Thanks osm0sis)
- Currently 3 file patches are required to avoid further errors:
- the _libintl_gettext error as mentioned in the comments
- the byteshift headers, and
- the ELF headers (Thanks Duncan Calvert & osm0sis)
ct-ng build
Of course, this is NOT going to enable you to build linux applications from inside Visual Studio. (VS2010 and later let you build with other toolchains such as gcc, but you'd need an appropriate toolchain description in addition to the cross-compiler built by crosstool-ng). But you'll have a working g++-linux-gnu
, which you can either run directly or using a Makefile.
NOTE: Building the cross-compiler takes a LONG time. osm0sis has provided a prebuilt gcc 4.8.1 here, along with his notes on building the cross-compiler (used to update this answer).
ct-ng build
step now, trying to make sure my answer is as complete as possible and includes solutions to any gotchas along the way. And yes, the compiler I'm building will generate ELF executables which are dynamically linked against glibc (and other libraries as appropriate). –
Lanielanier mount: warning: couldn't determine mount type.
Still unresolved. –
Koppel Your best bet is to use a cross platform IDE like Code::Blocks that can import MSVC projects, and generate a Makefile for Linux, which you can then run on a Linux (with even the same program if you so wish).
So your work flow would then look something like the following:
Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile
-> test compile and debug with GCC
-> copy to Linux with Code::Blocks -> test compile & debug on Linux
It's a little obtuse, probably, but at least Code::Blocks takes care of a lot of those small details with things like Makefiles, and what not.
Compile to Linux from Windows without to use virtualization or cross compiler but only natively via CoLinux. Create native Linux executable files without leave (reboot) windows. C/C++ Compiling for Linux under Windows through Cooperative Linux. The fastest switching between Windows and Linux through Alt+Tab (no restarting or rebooting needed):
- Install CoLinux
- Use CoLinux root file system image: Ubuntu-9.04-1gb.7z
- Start CoLinux
- Change string
archive.ubuntu.com
toold-releases.ubuntu.com
with:
$ sudo vi /etc/apt/sources.list
- Update your configuration:
$ sudo apt-get update
- Install two software packages to be able to compile your programs (c/c++, gcc compilers, mysql dev 5.1):
$ sudo apt-get install build-essential
$ sudo apt-get install libmysqlclient15-dev
- Accessing Windows directories from CoLinux:
$ mount cofs0 /mnt/ -t cofs
$ cd /mnt
- Compile
$ c++ your.source.cc -o executable.name
Are you asking for something that can take code written to run on Windows and make it run on linux? There's not really a compiler that does that - but maybe you're looking for Wine ( http://www.winehq.org/ ) which lets you run Windows apps on linux (if they use APIs Wine has thunked out).
Edit: I'm assuming your code is using Windows APIs (Win32, etc.) in this answer. If you're only using Standard C++ and libraries available cross-platform, then there's lots of other answers.
winelib
is a good suggestion in case the code is full of Win32-isms. But saying there's no compiler to build Linux binaries is baloney. –
Lanielanier I don't believe there are any compilers that allow you to compile on Windows and then take the resulting binary and run it on a Linux machine. Your best bet is to set up two development environments, one on Windows and one on Linux. Do most of your development and debugging in the Windows environment if that's what suits you, then frequently compile and test under Linux to be sure your code is truly cross-platform. You'll also want to use a cross-platform build system and testing framework. I recommend using cmake and Google Test, respectively.
© 2022 - 2024 — McMap. All rights reserved.