質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

2回答

5590閲覧

Cygwin上でmingwでビルドしたい。

kokawa2003

総合スコア217

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

1クリップ

投稿2019/01/12 09:39

編集2022/01/12 10:55

Cygwin上で動作する実行ファイルを作りました。
これ動作するときCygwin用の実行ファイルを使っていますが、それではcygwinの中でしか使えないので普通に使える実行ファイルを作りたいと思ったので調べていると
http://takuya-1st.hatenablog.jp/entry/20120614/1339702326
このことを知りました。
CygwinでMingWでビルドできるという技です。

現在私の実行ファイルはコンパイルにmakeをつかっています。そこでaliasでgcc/g++を変えてmakeしました。
alias g++=x86_64-w64-mingw32-g++
alias gcc=x86_64-w64-mingw32-gcc
make
しかしながら実行ファイルの依存性をdepends.exeで見てみると、cygwin1.dlli依存は変わっていませんでした。
そこでMakefileを直接開いてgcc/g++を直接編集してx86_64-w64-mingw32-gcc/g++にすると今度は大量にエラーが出ました。
どうもそれだけではだめみたいです。他に何を変えなければいけないのか私はわかりませんでした
以下にそのmakeを添付します。(一部)

Makefile

1 2AR = ar 3AUTOCONF = ${SHELL} /home/kokawa2003/work/cartoonizer/missing autoconf 4AUTOHEADER = ${SHELL} /home/kokawa2003/work/cartoonizer/missing autoheader 5AUTOMAKE = ${SHELL} /home/kokawa2003/work/cartoonizer/missing automake-1.15 6AWK = gawk 7CARTOONIZER_CFLAGS = -D_REENTRANT -I/usr/include/gtkmm-3.0 -I/usr/lib/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/gdkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/giomm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/lib/pangomm-1.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/cairomm-1.0 -I/usr/lib/cairomm-1.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include 8CARTOONIZER_LIBS = -lX11 -lgtkmm-3.0 -latkmm-1.6 -lgdkmm-3.0 -lgiomm-2.4 -lpangomm-1.4 -lglibmm-2.4 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lgio-2.0 -lcairomm-1.0 -lcairo -lsigc-2.0 -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl 9CATALOGS = 10CATOBJEXT = .gmo 11CC = gcc 12CCDEPMODE = depmode=gcc3 13CFLAGS = -g -O2 14CPP = gcc -E 15CPPFLAGS = 16CXX = g++ 17CXXCPP = g++ -E 18CXXDEPMODE = depmode=gcc3 19CXXFLAGS = -g -O2 20CYGPATH_W = cygpath -w 21DATADIRNAME = share 22DEFS = -DHAVE_CONFIG_H 23DEPDIR = .deps 24DLLTOOL = dlltool 25DSYMUTIL = 26DUMPBIN = 27ECHO_C = 28ECHO_N = -n 29ECHO_T = 30EGREP = /usr/bin/grep -E 31EXEEXT = .exe 32FGREP = /usr/bin/grep -F 33GETTEXT_PACKAGE = cartoonizer 34GMOFILES = 35GMSGFMT = /usr/bin/msgfmt 36GREP = /usr/bin/grep 37INSTALL = /usr/bin/install -c 38INSTALL_DATA = ${INSTALL} -m 644 39INSTALL_PROGRAM = ${INSTALL} 40INSTALL_SCRIPT = ${INSTALL} 41INSTALL_STRIP_PROGRAM = $(install_sh) -c -s 42INSTOBJEXT = .mo 43INTLLIBS = -lintl 44INTLTOOL_EXTRACT = /usr/bin/intltool-extract 45INTLTOOL_MERGE = /usr/bin/intltool-merge 46INTLTOOL_PERL = /usr/bin/perl 47INTLTOOL_UPDATE = /usr/bin/intltool-update 48INTLTOOL_V_MERGE = $(INTLTOOL__v_MERGE_$(V)) 49INTLTOOL_V_MERGE_OPTIONS = $(intltool__v_merge_options_$(V)) 50INTLTOOL__v_MERGE_ = $(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY)) 51INTLTOOL__v_MERGE_0 = @echo " ITMRG " $@; 52INTL_MACOSX_LIBS = 53LD = /usr/x86_64-pc-cygwin/bin/ld.exe 54LDFLAGS = 55LIBOBJS = 56LIBS = 57LIBTOOL = $(SHELL) $(top_builddir)/libtool 58LIPO = 59LN_S = ln -s 60LTLIBOBJS = 61LT_SYS_LIBRARY_PATH = 62MAKEINFO = ${SHELL} /home/kokawa2003/work/cartoonizer/missing makeinfo 63MANIFEST_TOOL = : 64MKDIR_P = /usr/bin/mkdir -p 65MKINSTALLDIRS = ./mkinstalldirs 66MSGFMT = /usr/bin/msgfmt 67MSGFMT_OPTS = -c 68MSGMERGE = /usr/bin/msgmerge 69NM = /usr/bin/nm -B 70NMEDIT = 71OBJDUMP = objdump 72OBJEXT = o 73OTOOL = 74OTOOL64 = 75PACKAGE = cartoonizer 76PACKAGE_BUGREPORT = 77PACKAGE_NAME = cartoonizer 78PACKAGE_STRING = cartoonizer 0.1 79PACKAGE_TARNAME = cartoonizer 80PACKAGE_URL = 81PACKAGE_VERSION = 0.1 82PATH_SEPARATOR = : 83PKG_CONFIG = /usr/bin/pkg-config 84PKG_CONFIG_LIBDIR = 85PKG_CONFIG_PATH = 86POFILES = 87POSUB = po 88PO_IN_DATADIR_FALSE = 89PO_IN_DATADIR_TRUE = 90RANLIB = ranlib 91SED = /usr/bin/sed 92SET_MAKE = 93SHELL = /bin/sh 94STRIP = strip 95USE_NLS = yes 96VERSION = 0.1 97XGETTEXT = /usr/bin/xgettext 98abs_builddir = /home/kokawa2003/work/cartoonizer/src 99abs_srcdir = /home/kokawa2003/work/cartoonizer/src 100abs_top_builddir = /home/kokawa2003/work/cartoonizer 101abs_top_srcdir = /home/kokawa2003/work/cartoonizer 102ac_ct_AR = ar 103ac_ct_CC = gcc 104ac_ct_CXX = g++ 105ac_ct_DUMPBIN = 106am__include = include 107am__leading_dot = . 108am__quote = 109am__tar = $${TAR-tar} chof - "$$tardir" 110am__untar = $${TAR-tar} xf - 111bindir = ${exec_prefix}/bin 112build = x86_64-unknown-cygwin 113build_alias = 114build_cpu = x86_64 115build_os = cygwin 116build_vendor = unknown 117builddir = . 118datadir = ${datarootdir} 119datarootdir = ${prefix}/share 120docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} 121dvidir = ${docdir} 122exec_prefix = ${prefix} 123host = x86_64-unknown-cygwin 124host_alias = 125host_cpu = x86_64 126host_os = cygwin 127host_vendor = unknown 128htmldir = ${docdir} 129includedir = ${prefix}/include 130infodir = ${datarootdir}/info 131install_sh = ${SHELL} /home/kokawa2003/work/cartoonizer/install-sh 132intltool__v_merge_options_ = $(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY)) 133intltool__v_merge_options_0 = -q 134libdir = ${exec_prefix}/lib 135libexecdir = ${exec_prefix}/libexec 136localedir = ${datarootdir}/locale 137localstatedir = ${prefix}/var 138mandir = ${datarootdir}/man 139mkdir_p = $(MKDIR_P) 140oldincludedir = /usr/include 141pdfdir = ${docdir} 142prefix = /usr/local 143program_transform_name = s,x,x, 144psdir = ${docdir} 145sbindir = ${exec_prefix}/sbin 146sharedstatedir = ${prefix}/com 147srcdir = . 148sysconfdir = ${prefix}/etc 149target_alias = 150top_build_prefix = ../ 151top_builddir = .. 152top_srcdir = .. 153uidir = $(pkgdatadir)/ui 154ui_DATA = cartoonizer.ui 155AM_CPPFLAGS = \ 156 -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \ 157 -DPACKAGE_SRC_DIR=\""$(srcdir). \ 158 $(X11_CFLAGS). \ 159 $(GTK__CFLAGS)"\" \ 160 -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\" \ 161 $(CARTOONIZER_CFLAGS) 162 163 164

このあとMsysでコンパイルも試したがX11がないエラーが出て乗り越えられませんでした。
どうすればCygwinでmingwでビルドできますか?

追記
make ではなくconfigureで
./configure --host=x86_64-w64-mingw32
でいいみたいだが やるとX11のLIBがないエラーが復活するのでやはりmingwでは本質的に無理かもね
https://stackoverrun.com/ja/q/2774718

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2019/01/12 10:56

cygwin非依存にする際、X11もそうするならXming(あるいはWindows専用の別のXクライアントライブラリ?)が必要になると思うのですが、それ自体を導入しておられないように思えます。どういう類のexecutableのビルドを狙っておられるだろう・・・と感じたのですが?
KSwordOfHaste

2019/01/12 13:30 編集

うーん・・・ではcygwin上にインストールしておられるのはCygwin/Xということでしょうか?それを使う限りcygwinのPOSIX互換OSレイヤー(つまりcygwin1.dll)が前提となってしまう気がするのですが(正確に確認したわけではないですがそうなっていないということは考えにくい気がします)。実際のところX11は必須なのでしょうか?もしそうならcygwinに依存しないX11はどうするおつもりだったのでしょう? --- あ・・・失礼しました、それに苦労しておられると質問文に書いてありますね。X11が必要かどうかだけ確認させてください。
kokawa2003

2019/01/12 13:40

そうです。Cygwin/Xです。ただ単にLINUX上で動くソースをWINDOWSで動かし、フリーでくばりたいのですがCygwin/Xから離れられそうもないのでそれならXを使わない方向でソースを書き直すかQTがいいかもと考え中です。
guest

回答2

0

ふつーにコマンドプロンプトから直接MinGWのGCCでビルドするのではダメなんでしょうか

投稿2019/01/12 11:26

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokawa2003

2019/01/13 08:20

それをやったのですがX11のリンクエラーが起こってそれを乗り越えられませんでした。mingwではX11関係はmsysから入れられないらしいです。
guest

0

自分は充分な知識があるとは言えないのですがだれか詳しい方のつっこみを期待したいという下心もありコメントしてみたいと思います。

cygwinでのgccビルド環境がVisualStudioやMinGWのそれと何が一番違うかといえばPOSIX互換OSレイヤーのサポートDLLがあることではないでしょうか。つまりunix由来のソフトウェアが使用しているシステムコールがサポートされているためそういうものの移植が容易であることが特徴だと思います。

unixのシステムコールをあまり使わないものであればMingWやVC++ランタイムなどC/C++の標準ライブラリーの実装を含むDLLを前提としての移植はやりやすいと思います。どうしても必要なシステムコールはその代替品をなんらかの形で用意してやれば移植できるでしょう。その難易度は対象としているシステムコール(の互換ライブラリー)の実装の難易度に依存すると思います。

一方、いわゆるUnixライクなシステムコールを前提としたものをcygwin環境に依存せずに済ますのは「cygwinではない別のPOSIX互換OSレイヤーを作る」とか「ソフトウェアごとに必要なレベルだけ似た機能を実装して代替とする」方向になる気がするので、あえてcygwinを避けるのは合理的でないように思えます。Microsoft WindowsにはもちろんUnixライクなシステムコールはないのでそのレベルの互換機能を綿々と作ってきたのがcygwinでありその努力をやり直すのは大変すぎることだと思うのです。

意見:

X11について質問コメントでお尋ねすることを通して質問者さんの意図が「Linuxで動く多数のソフトのWindowsへの移植」とわかりました。それはcygwin前提でやった方がよさそうというのが自分の意見です。

投稿2019/01/12 14:20

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問