• ベストアンサー

windowsでLinuxで作成したソースをコンパイル

Linuxで作成、 $gcc -Wall file.c で、通ったファイルをWindowsでも同様に通したいので、MinGWを使って、コンパイルしたのですが、 #include <sys/socket.h> の構文で引っかかってしまいました。どうやらインクルードファイルが無いようでしたので、 C:\MinGW\include C:\MinGW\lib 以下に、Linuxの /usr/include/ /usr/lib/ 以下のファイルをそのまま入れて、再度実行しました。 ヘッダーファイルは見つけて読んでくれたのですが、そのヘッダーファイルに書いてある関数(例:htons(), socket(), inet_addr(), connect())が参照できないとの事で、怒られてしまいます。 Linuxのライブラリファイルをそのまま入れたのがまずかったのかもしれないのですが、こいつのエラーを解消する有効手段が見つかりません。 問題解決のヒント、又は答えを教えていただけませんでしょうか。 どうか、お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.4

Unix と Windows ネイティブな環境では基本的にヘッダファイルやライブラリの構造が、基本骨格 (いわゆる、stdio.h や stdlib.h などに含まれている関数) を除いては大きく異なっているので、Unix でコンパイルできたプログラムが必ずしも Windows でコンパイルし、実行できるわけではありません。(もちろん、その逆も当てはまります) MinGW は Windows ネイティブな実行プログラムを作成するものなので、MinGW でコンパイルする場合はちゃんと Windows 用のプログラムとして書かなければなりません (#2の方が書かれているように、socket.h ではなく、winsock2.h を使用するなど)。もし、Unix にのみ対応したプログラムを Windows 上で動かしたいと言うことであれば、Cygwin (要するに Unix 関数の処理を Windows ネイティブな処理に変換するエミュレータ) を利用する必要があります。

user_localhost
質問者

お礼

問題解決以外の事でも勉強になりました。ご回答くださりありがとうございます。 ご返答が遅くなってしまい申し訳ありませんでした。

その他の回答 (3)

回答No.3

Cygwin の環境の中でコンパイルしてみたらどうでしょうかね。(ネットワーク関係は多分同じじゃないかな?)

参考URL:
http://www.cygwin.com/
user_localhost
質問者

お礼

ありがとうございます。早速試してみます。 ご回答くださったのに返答が遅くなり、申し訳ありません。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

winsock2.h を使うように修正する、かな。

user_localhost
質問者

お礼

回答ありがとうございます。 最終的に、サーバープログラムをLinuxで、クライアントプログラムをWindowsで作成して管理していくつもりですが、外部からアクセスできるか実験してみたかったので、諸事情により、自宅にいながら外部から一番簡単な方法でアクセスする方法がWindowsでしかなかったので、このような回りくどい方法を取っております。  あと1日くらい、無い知恵を絞り、問題解決に取り組もうと思います

  • AnalHare
  • ベストアンサー率8% (9/110)
回答No.1

クロスプラットフォーム対応のツールでナイトむりぽ。 そうでなければ、それぞれのプラットフォームで動くように ソース改変後こんぱいるしてみてくり

user_localhost
質問者

お礼

ありがとうございます。クロスプラットフォームという、一つの答えにたどり着くことができました。

関連するQ&A