プロが教える店舗&オフィスのセキュリティ対策術

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のライブラリファイルをそのまま入れたのがまずかったのかもしれないのですが、こいつのエラーを解消する有効手段が見つかりません。

問題解決のヒント、又は答えを教えていただけませんでしょうか。
どうか、お願い致します。

A 回答 (4件)

Unix と Windows ネイティブな環境では基本的にヘッダファイルやライブラリの構造が、基本骨格 (いわゆる、stdio.h や stdlib.h などに含まれている関数) を除いては大きく異なっているので、Unix でコンパイルできたプログラムが必ずしも Windows でコンパイルし、実行できるわけではありません。

(もちろん、その逆も当てはまります)

MinGW は Windows ネイティブな実行プログラムを作成するものなので、MinGW でコンパイルする場合はちゃんと Windows 用のプログラムとして書かなければなりません (#2の方が書かれているように、socket.h ではなく、winsock2.h を使用するなど)。もし、Unix にのみ対応したプログラムを Windows 上で動かしたいと言うことであれば、Cygwin (要するに Unix 関数の処理を Windows ネイティブな処理に変換するエミュレータ) を利用する必要があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/23 07:42

Cygwin の環境の中でコンパイルしてみたらどうでしょうかね。

(ネットワーク関係は多分同じじゃないかな?)

参考URL:http://www.cygwin.com/
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/23 07:40

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/15 23:44

クロスプラットフォーム対応のツールでナイトむりぽ。



そうでなければ、それぞれのプラットフォームで動くように
ソース改変後こんぱいるしてみてくり
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/15 23:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!