I have written a tiny application for Ubuntu, and it works great. I am interested in cross-compiling it for Windows.
I have installed mingw32
from repository, and it compiles simple files very well. However, the app I want to compile for Windows uses some UNIX specific mechanism - for example it makes use of the sys/socket.h file, and the mingw compiler claims it can't find it.
One solution is to install Cygwin on a Windows machine, and try compiling the application from there, using Cygwin executables. Unfortunately, I don't have access to any Windows machine, as I don't own a copy that system. It would be perfect if I somehow could use Cygwin (with it's libraries and headers) on my Ubuntu to compile an .exe file.
There is no package with it in the repositories. Can anyone give me some on how to use Cygwin on Ubuntu?
Cygwin is a windows program that allows you to run linux programs in windows, so it wouldn't make any sense to have it in the repositories.
I suspect your only chance of having this work would be to run cygwin in wine.
It sounds like you have two separate questions:
As I said above, for 1, yes, you should be able to run cygwin in wine for testing.
Questions 2 is unrelated and should be moved to a different question. (For what it's worth, I have no idea about the answer to 2).
Have you tried wine?
Anyway, you can use Virtual Box and 90-day Trial Windows 7, but only if your application is not comercial ;)
The Cygwin cross-compilers are available on Fedora/EPEL using a custom repo (Copr) – https://copr.fedorainfracloud.org/coprs/yselkowitz/cygwin – so in principle it should be possible to run it on Ubuntu too. I don't know if you can install Fedora/EPEL cygwin on Ubuntu and if it would work (you could try converting the RPM to a deb using alien and installing that). Otherwise, you could study the RPM spec files for hints on how to build it from source on Ubuntu.
Note that Cygwin has three parts – a toolchain, the runtime DLL, and ported packages. The runtime DLL and the ported packages won't work under Linux unless you use Wine, and given the limitations of Wine's emulation of the Windows API may not work reliably (depending on exactly what you are using them for). The toolchain can be compiled for Linux as a cross-compiler, and then you can use it to compile Cygwin executables from Linux. This may be useful if you have a Linux-only CI environment, if you have plenty of Linux hosts and a shortage of Windows hosts, etc. (Trying to run the toolchain under Wine may work, although last time I tried to run Cygwin executables under Wine it complained I was using the wrong cygwin1.dll version for my Windows version – maybe using a newer Wine may fix that.)
Anyway, I managed to install Fedora 33 in a chroot on Ubuntu 19.10, and then install and run the Cygwin toolchain in that Fedora chroot – see the following script. Note this doesn't work on Ubuntu 20.04 or later due to the removal of yum in Ubuntu 20.04. Probably there is a less hacky way, like using a Fedora Docker container, or trying to use Alien to install the Fedora RPMs on Ubuntu directly.
Acknowledgement: parts of below script were lifted from this answer