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

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

ただいまの
回答率

89.97%

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 970

kokawa2003

score 152

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を添付します。(一部)

AR = ar
AUTOCONF = ${SHELL} /home/kokawa2003/work/cartoonizer/missing autoconf
AUTOHEADER = ${SHELL} /home/kokawa2003/work/cartoonizer/missing autoheader
AUTOMAKE = ${SHELL} /home/kokawa2003/work/cartoonizer/missing automake-1.15
AWK = gawk
CARTOONIZER_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
CARTOONIZER_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
CATALOGS = 
CATOBJEXT = .gmo
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -g -O2
CPP = gcc -E
CPPFLAGS = 
CXX = g++
CXXCPP = g++ -E
CXXDEPMODE = depmode=gcc3
CXXFLAGS = -g -O2
CYGPATH_W = cygpath -w
DATADIRNAME = share
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = 
DUMPBIN = 
ECHO_C = 
ECHO_N = -n
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = .exe
FGREP = /usr/bin/grep -F
GETTEXT_PACKAGE = cartoonizer
GMOFILES = 
GMSGFMT = /usr/bin/msgfmt
GREP = /usr/bin/grep
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
INSTOBJEXT = .mo
INTLLIBS = -lintl  
INTLTOOL_EXTRACT = /usr/bin/intltool-extract
INTLTOOL_MERGE = /usr/bin/intltool-merge
INTLTOOL_PERL = /usr/bin/perl
INTLTOOL_UPDATE = /usr/bin/intltool-update
INTLTOOL_V_MERGE = $(INTLTOOL__v_MERGE_$(V))
INTLTOOL_V_MERGE_OPTIONS = $(intltool__v_merge_options_$(V))
INTLTOOL__v_MERGE_ = $(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))
INTLTOOL__v_MERGE_0 = @echo "  ITMRG " $@;
INTL_MACOSX_LIBS = 
LD = /usr/x86_64-pc-cygwin/bin/ld.exe
LDFLAGS = 
LIBOBJS = 
LIBS = 
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIPO = 
LN_S = ln -s
LTLIBOBJS = 
LT_SYS_LIBRARY_PATH = 
MAKEINFO = ${SHELL} /home/kokawa2003/work/cartoonizer/missing makeinfo
MANIFEST_TOOL = :
MKDIR_P = /usr/bin/mkdir -p
MKINSTALLDIRS = ./mkinstalldirs
MSGFMT = /usr/bin/msgfmt
MSGFMT_OPTS = -c
MSGMERGE = /usr/bin/msgmerge
NM = /usr/bin/nm -B
NMEDIT = 
OBJDUMP = objdump
OBJEXT = o
OTOOL = 
OTOOL64 = 
PACKAGE = cartoonizer
PACKAGE_BUGREPORT = 
PACKAGE_NAME = cartoonizer
PACKAGE_STRING = cartoonizer 0.1
PACKAGE_TARNAME = cartoonizer
PACKAGE_URL = 
PACKAGE_VERSION = 0.1
PATH_SEPARATOR = :
PKG_CONFIG = /usr/bin/pkg-config
PKG_CONFIG_LIBDIR = 
PKG_CONFIG_PATH = 
POFILES = 
POSUB = po
PO_IN_DATADIR_FALSE = 
PO_IN_DATADIR_TRUE = 
RANLIB = ranlib
SED = /usr/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
USE_NLS = yes
VERSION = 0.1
XGETTEXT = /usr/bin/xgettext
abs_builddir = /home/kokawa2003/work/cartoonizer/src
abs_srcdir = /home/kokawa2003/work/cartoonizer/src
abs_top_builddir = /home/kokawa2003/work/cartoonizer
abs_top_srcdir = /home/kokawa2003/work/cartoonizer
ac_ct_AR = ar
ac_ct_CC = gcc
ac_ct_CXX = g++
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = $${TAR-tar} chof - "$$tardir"
am__untar = $${TAR-tar} xf -
bindir = ${exec_prefix}/bin
build = x86_64-unknown-cygwin
build_alias = 
build_cpu = x86_64
build_os = cygwin
build_vendor = unknown
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = x86_64-unknown-cygwin
host_alias = 
host_cpu = x86_64
host_os = cygwin
host_vendor = unknown
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /home/kokawa2003/work/cartoonizer/install-sh
intltool__v_merge_options_ = $(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))
intltool__v_merge_options_0 = -q
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
mandir = ${datarootdir}/man
mkdir_p = $(MKDIR_P)
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
uidir = $(pkgdatadir)/ui
ui_DATA = cartoonizer.ui
AM_CPPFLAGS = \
    -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \
    -DPACKAGE_SRC_DIR=\""$(srcdir). \
    $(X11_CFLAGS). \
    $(GTK__CFLAGS)"\" \
    -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\" \
    $(CARTOONIZER_CFLAGS)


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KSwordOfHaste

    2019/01/12 19:56

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

    キャンセル

  • kokawa2003

    2019/01/12 21:53

    Xmingは今知ったので入れていません。というかこれって有償だしソースもpatchしかないじゃないですか。
    で今
    http://www.mingw.org/wiki/Community_Supplied_Links
    を見ながら唸ってます

    キャンセル

  • KSwordOfHaste

    2019/01/12 22:27 編集

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

    キャンセル

  • kokawa2003

    2019/01/12 22:40

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

    キャンセル

回答 2

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/13 17:20

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

    キャンセル

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前提でやった方がよさそうというのが自分の意見です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る