Mam cygwin w oknach, przez które uruchamiam gcc. Ale po utworzeniu plików .exe, jeśli uruchomię je na innych komputerach, które nie mają cygwin, oznacza to, że nie znaleziono pliku cygwin1.dll. Czy istnieje sposób ich kompilacji, aby działały w dowolnym systemie?Kompilowanie za pomocą gcc (cygwin na windows)
Odpowiedz
W twoim przypadku, spróbuj skopiować cygwin1.dll jak również (ale może to zależeć od innych bibliotek DLL, jak również) (oczywiście musi być zgodne z Cygwin na license w odniesieniu do dystrybucji cygwin1.dll)
W Cygwin zawsze można sprawdzić potrzebnych modułów przy użyciu:
objdump -p a.exe | grep 'DLL Name'
lUB
cygcheck ./a.exe
lub dla okien w ogóle, coś jak używać tego narzędzia: Dependency Walker
Możesz spróbować kompilacji za pomocą opcji wiersza poleceń -mno-cygwin
.
Musisz skompilować dla trybu MinGW (Minimal GNU Win32). Robisz to instalując mingw zamiast (lub oprócz) cygwin, lub przekazując opcję kompilatora --mno-cygwin do gigc cygwin.
Ale używam funkcji rozwidlenia w moim programie. Jeśli używam -mno-cygwin, oznacza to, że fork nie jest zdefiniowany. – avd
Następnie będziesz musiał dostarczyć cygwin1.dll swoim użytkownikom. Sam system Windows nie zapewnia wywołania systemowego fork(). Najlepiej byłoby przepisać kod, aby nie używać już widelca. –
Od http://cygwin.com/faq/faq.html#faq.programming.win32-no-cygwin
Jak mogę skompilować plik wykonywalny Win32, który nie korzysta Cygwin?
Kompilatory dostarczone przez pakiety pakietów mingw-gcc, mingw64-i686-gcc i mingw64-x86_64-gcc ze standardowymi bibliotekami DLL firmy Microsoft zamiast Cygwin. Jest to pożądane w przypadku rodzimych programów systemu Windows, które nie potrzebują warstwy emulacji systemu UNIX.
Nie należy tego mylić z "MinGW" (minimalistycznym GNU dla Windows), co jest całkowicie oddzielnym wysiłkiem.
cygcheck mówi: "Błąd: nie można znaleźć pliku", jeśli napiszę "cygcheck a.exe" – avd
użyj: "cygcheck ./a.exe" – Amro