Gentoo coLinux で MinGW クロスコンパイル >> 雑多な疑問と不正確な回答

雑多な疑問と不正確な回答

General

__errorno_local への参照が未解決ですと表示されコンパイルに失敗します。

ホスト環境でこのエラーが表示される場合、pthread をリンクするようにします。リンカに -lpthread を渡します。

クロス環境で表示されるのであれば、コンパイラがクロス環境用のインクルードファイルを参照していないことを表しています。C_INCLUDE_PATH などが正しく設定されているか確認してください。
_select@20 への参照が未解決ですと表示されコンパイルに失敗します。

libwsock32.a をリンクする必要があります。リンカに -lwsock32 を渡してください。
正しくライブラリを指定しても「参照が未解決です」と表示されリンクに失敗します。

gcc に渡すパラメータには順序があり、参照元ファイル、参照先ファイルの順に指定する必要があります。通常は出力ファイル名、オブジェクト、ライブラリの順に指定すればリンクが通ります。

Makefile が暗黙のターゲットを使用し記述されている場合、 LDFLAGS のあとに続けてオブジェクト、出力ファイル名が指定されるため、このようなエラーが発生します。簡単なものであれば、手作業でエラー箇所のコマンドを抜き出して順序を変更しリンクすることで応急処置できます。
外したコンパイルオプションがなぜか指定されます。

libtool が作成する la ファイルにコンパイルオプションが記録されているため、 makefile などを書き換え不要なコンパイルオプションをすべて削除しても、libtool を通して付加されます。リンク対象になっている la ファイルを確認してください。
dirent.d_name への参照で SEGV します。

dirent 構造体の内容が変更されたため古い dirent.h を使用してコンパイルされたバイナリでは SEGV する可能性があります。新しい mingw-runtime に添付されている dirent.h および libmingwex.a を読み込むようにしてください。

Tor Lillqvist 氏が配布されている dirent.h がインクルード検索パスに存在する場合はこの問題が発生します。

VC

Visual C++ の dsw/dsp ファイルでビルドできますか?

直接使用することはできないようです。 dsw/dsp ファイルを mingw-utils の dsw2mak により makefile に変換することでビルドできるかもしれません。

たとえば hoge.dsp を変換する場合、
${XMINGW}/cross dsw2mak hoge.dsp

で hoge.mak ファイルが作成されます。 make には -f オプションを付けてファイルを渡してやります。
${XMINGW}/cross make -f hoge.mak

デフォルトでは debug でビルドされます。 release でビルドするには make に CFG="hoge - Win32 Release" を渡してやります。
${XMINGW}/cross make -f hoge.mak CFG="hoge - Win32 Release"

dll のインポート ライブラリが作成されない場合は、 def ファイルが用意されていれば dlltool を使いインポート ライブラリを作成します。次のようにコマンドを実行します。 -U オプションはエクスポート関数の頭にアンダースコア(_)を付加します。
${XMINGW}/cross dlltool -U -d hoge.def -l hoge.dll.a
Visual C++ でビルドした dll を使えますか?

MinGW FAQ にそのものずばりのトピックがあります。

MSVC のプログラムから MinGW DLL を呼び出すことや、その逆は可能ですか? - MinGW について頻繁に尋ねられる質問と回答(MinGW FAQ)
http://www.sixnine.net/cygwin/translation/mingw-do...

How can an MSVC program call a MinGW DLL, and vice versa? - MinGW - Frequently Asked Questions
http://www.mingw.org/mingwfaq.shtml#faq-msvcdll

libtool

shared ライブラリを作成できない

libtool の問題により shared ライブラリを作成できない場合があります。この問題は libtool を書き換えて対処します。対象は configure が作成した libtool ファイルです。 /usr/bin/libtool を書き換えてはいけません。
  • allow_undefined_flag の値を supported にする。
  • always_export_symbols の値を yes にする。

前者は shared にするため。後者は ライブラリ名.dll.a の形式のライブラリを見つけられるようにするためです。configure に --enable-shared オプションをつけても修正しなければならないのは、 configure を調べて原因を探すべきですが、現状、そこまでできてません。

libtool --mode=install で la ファイルのインストールに失敗する。

la ファイルには dll ファイルや a ファイルへのパスが記録されています。 libtool はこれらを参照しインストールを試みます。しかしパスが間違っているか、記録されているパスと同じ場所にインストールしようとしたとき、作業を中止します。

la ファイルを削除し再度 make install することで正しい la ファイルが作成され、正常にインストールできます。 la ファイルの削除は、たとえばソースの解凍先直下に build ディレクトリを作り作業している場合、その build をカレントにし、
rm `find ./ -name \*.la`

を実行することで削除できます。重要なファイルを削除しないよう注意してください。 -i オプションをつけることで対話的に削除できます。慣れないうちは -i オプションをつけ注意深く確認することをお勧めします。

[2006/5/30tue] 追記。 *.lai ファイルも削除する必要があるかも。

Gimp

自ビルド版と Simoncic 版を混在させたい。

環境変数 GIMP2_DIRECTOR, FONTCONFIG_PATH と --gimprc オプションを使用することで不完全ながら混在できます。バッチファイルに次のように記述し Gimp を起動します。
 set GIMP_HOME=<install directory>
 set USER_DIR=<data directory>
 set GIMP2_DIRECTORY=%USER_DIR%
 set FONTCONFIG_PATH=%USER_DIR%
 rem set FONTCONFIG_FILE=font-cache-2
 cd /d %GIMP_HOME%\bin
 gimp-2.2.exe --gimprc=%USER_DIR%\gimprc

※ 動作チェックしてません。

<install directory>、<data directory>は適宜読み替えてください。

更新履歴


2007/11/30fri 「 dirent.d_name への参照で SEGV します」を追記。
2007/6/16sat VC を追記。 typo 修正。
2007/2/9fri 「 shared ライブラリを作成できない」を追記。「自ビルド版と Simoncic 版を混在させたい」を変更。
2006/11/26sun 目次を付けた。
2006/5/30tue 「正しくライブラリを指定しても参照が未解決ですと表示されリンクに失敗します」を追記。
2006/3/9thu ページ作成。
タグ

このページへのコメント

The ablitiy to think like that shows you're an expert

0
Posted by Gianluca 2012年09月29日(土) 16:25:48
http://www.facebook.com/profile.php?id=10000340672...
返信

Makefile.am LDFLAGSの場合、

-lkernel32 でなく-Wl,-lkernel32とすると
一番最後に持ってきてくれます。
===

正しくライブラリを指定しても「参照が未解決です」と表示されリンクに失敗します。

gcc に渡すパラメータには順序があり、参照元ファイル、参照先ファイルの順に指定する必要があります。通常は出力ファイル名、オブジェクト、ライブラリの順に指定すればリンクが通ります。

Makefile が暗黙のターゲットを使用し記述されている場合、 LDFLAGS のあとに続けてオブジェクト、出力ファイル名が指定されるため、このようなエラーが発生します。簡単なものであれば、手作業でエラー箇所のコマンドを抜き出して順序を変更しリンクすることで応急処置できます。

0
Posted by wind 2007年02月24日(土) 02:10:47 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

編集にはIDが必要です