• ベストアンサー

ターゲットがUNIXなんですが、Windowsで開発をするには?

UNIXでC言語を使用してXwindowアプリを開発しているのですが、 効率があまり良くないので、Windowsの統合環境で開発できないかと考えています。 実現するヒントとか、すでに構築済みという方がいらっしゃいましたらご教授願えますでしょうか? UNIXマシンのスペックがそんなに高くなく(Pentium3 600MHz/RAM256MB)、 またOSがEclipseなどもサポートしていないので仕方がなく、viとEmacsで開発しています。 コンパイラはgcc、デバッガはgdbを使用しています。 作成しているのはコンソールアプリではなく、Xwindowのアプリです。 理想はWindows上で、Eclipseのような統合環境上でソースを編集し(ソースはUNIXマシンからSambaで参照)、 リモートでビルドを行い、Windows側でブレークを貼りデバッグできればとても快適です。 ちなみにWindowsマシンのスペックは悪くないです。 Pentium4 2.4GHz/RAM512MB です。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

Windows上でクロスコンパイルを行うには、CygwinまたはMinGW+MSysの環境で、BinutilsとGCCをビルドする必要があります。ライブラリはUnixからコピーしてくればどうにかなるでしょう。 BinutilsやGCCのビルドはconfigure時に--target=ターゲット名を指定することでクロスツールにできます。 gdbをリモートで使う場合は、gdbもビルドが必要です。 gdbserver経由でリモートデバッグする場合でも、ブレークポイントやステップ実行ぐらいはできますが、一言では言えない不便さがあります。 コンパイルエラー発生時に指定箇所に飛ぶかどうかについては、サクラエディタであれば「外部コマンド」でコンパイラを起動して、エラーメッセージのところでF12を押せばタグジャンプできると思います。 これはSambaでも可能だと思いますが、サクラエディタはネットワークドライブを扱うと異様に遅くなったりするのが難ですね。

yu5473
質問者

お礼

ありがとうございます。 教えていただいた方法を試してみます。

その他の回答 (9)

  • hel-cat
  • ベストアンサー率35% (30/85)
回答No.10

#1,5,8です。 Unix半年ですか、、、 ここで、開発に多少余裕があるのならUnixのエディタ、コマンド、shell、awk etc覚えた方がスキルアップになりますね(^^ ただ、開発期間がないのなら 1、WindowsのC開発エディタ(VisualStudio、Eclipse etc)でsystem関数やXの関数部分のみSTBを作ってCの部分のデバッグをする。 2、Xの環境が動作可能なところでリコンパイルして、system関数やXの部分のデバッグをする。 というのもありだと思います。 また、コーディングのみWindows環境を使用し、コンパイル->テストをX環境でやるのもいいのかもしれません。 ただ、気をつけてほしいのは、WindowsのCコンパイラの方が利口な子(??? 小さな親切大きなお世話)が多いこと、、、 多少、変なコーディングしてもcoreはきません。反対にgccはコンパイルの基準もかなり厳しく、coreはさっくりはきます。。。 Windows開発からUnix開発に移ってきた人は、はまる人おおいですよ。 あとは、文字コードですか、、、 また、一概に言えないのですが、Unixの開発では、少し作って->動かしてみて・・・という作業はあまり行いません。関数仕様に従いガッツリ作ってコンパイル->テストです。 また、Makefileの使い方によっても作業手順省けます。(インストール先の設定とか・・・) 少々話の路線がずれてしまいましたが、Xサーバ(実機)のスペックはいいのですよね。。。 もともとX自体が重いんですよ、起動時にfontとかロードするし、、、開発するならスペックのいいマシンに限ります。 #私的意見ではUnixのスペックがよければOKです >一人2台ずつ会社から貸与されており、UNIXでの開発マシンとは >別に仕様書等作成・メール利用などのためにWindowsノートPCを利用できる状態です。 一人2台ですか、、、うらやましい限りです。

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.9

#6,7です。 参考URLを見るとMotifライブラリが使用できるようです。 XFree86 3.1.2のようなのですが、バイナリファイルは`LynxOS x86 3.0.1' 上で構築されたものしか提供されてなくて、それ以前のOSの場合はソースからのコンパイルになります。 質問者のLynxOS 2.3.0だとLynxOS 2.4.0での構築方法でコンパイルはできるようです。 ただし、共有ライブラリは未対応のようなので注意が必要でしょう。 やはり、Cygwinを使うしかないと思います。

参考URL:
http://xjman.dsl.gr.jp/xf86_3/LynxOS.html#toc6
  • hel-cat
  • ベストアンサー率35% (30/85)
回答No.8

#1,5です #7様の仰る通りLynx4.x以上はEclipse対応みたいですね。。。 ただ、Eclipseにあまり詳しくないのでなんともいえませんがXの環境(ライブラリ)がなければ、ブレークポイントを設定して云々・・・としてもXの関数で戻ってこなくなったりしないのかな、、、 そもそもわたしの感覚からするとEclipseはJava開発用。。。C/C++プラグインや、PHPプラグインなどを導入することで、各種言語の開発環境になるということですよね。Xは???です。(質問者様がEclipseを使い慣れているのであれば調べる価値ありますね) 本来Unix上でのXwindowAPの開発と言うことはUnix to UnixのCSシステムを構築するイメージが強いです。 どのような環境下で動作するもの、開発規模が不明なのであくまで憶測でしかものがいえませんが、 複数人で開発する場合、ファイル管理方法が決まっているはずです。また、最終動作環境も決まっているはずです。 がちがちに決まっている開発環境下ですと、スペックが悪くても諦めて開発するか、マシンスペックを上げてもらうか。。。という手段しかないと思います。 また、反対にUnixでの開発は単体レベルまではある程度独自の環境下で行ってもかまわないと定義されている開発環境なのであれば、スペックのよい個人のWindowsマシンにソース持ってきてCygwin使ってXサーバもどきにして開発しちゃえば???と言うだけです。 LynxOSにのせたXのライブラリが何処のものかわかりませんが、ANSIの規格に準拠したコーディングであればCで記述した部分においては問題なく動作します。Xのライブラリ関数においても同様です。 >デバッグはCygwin内のウインドウでemacs + gdbとかで行ったのでしょうか? 私はvi派ですのでvi+gdbです >、コンパイル・ビルド時のエラー修正や、ステップ実行時の手順等、すべてをUNIX上で行うのに比べて何らかのメリットがあるのでしょうか? 上記質問で、おや、、、もしかしてUnixでの開発経験が浅い???と感じてしまいました。 手順は同じです。私からすると、VisualStadioとか使ってコーディング、コンパイル、デバックの方が手順が多くて面倒です。(視覚的にはいいのかもしれないですが) Unixでの開発はエディタをどのように使いこなすか、コマンドをどれだけ知っているかによって使いやすくも悪くもなります。(開発環境然りです) 当初の質問がUNIXのスペックが悪いとのことでしたので、開発環境で使用許可がおりるのであればCygwinでの擬似環境開発・・・という選択がありますよぉ~と言うだけです。 開発環境をWindowsに構築してOKだったら 1.WindowsにXサーバの環境を構築する (使用OSと同との環境にする、、、文字コードetc要注意) 2.Windows上で開発する 3.Windows上でデバッグする 4.UNIX側で再コンパイルして最終試験する   ※この時、環境設定によって自席でそのまま作業できます。 という段取りとなるかと思います。 あと気になる点としては、個人マシンにソースを持ってきていいのか!!と言うことですよね。 どのようなルートでの開発かによっては、ソースも発注先の資産になるので、勝手にローカルに保持していちゃまずいです。(今は、うるさいところはめちゃくちゃうるさい!) こんなんで、補足の解答になりましたか?

yu5473
質問者

補足

回答ありがとうございます。 やっぱりCygwinですかねー。 >複数人で開発する場合、ファイル管理方法が決まっているはずです。また、最終動作環境も決まっているはずです。 >がちがちに決まっている開発環境下ですと、スペックが悪くても諦めて開発するか、マシンスペックを上げてもらうか。。。 >また、反対にUnixでの開発は単体レベルまではある程度独自の環境下で行ってもかまわないと定義されている >開発環境なのであれば、スペックのよい個人のWindowsマシンにソース持ってきてCygwin使ってXサーバもどきにして >開発しちゃえば???と言うだけです。 ファイルの管理方法は、CVSを使用しております。 単体テストが終わったら、CVSにコミットという流れです。 また、最終動作環境は開発環境ではなく実機で行うことになっているので、 単体レベルまではある程度の独自環境でも問題ないという状態なんです。 >おや、、、もしかしてUnixでの開発経験が浅い???と感じてしまいました。 ご想像のとおりです。UNIXでの開発経験は半年ほどです。 いままでは、VCでのWindowsアプリ開発や、EclipseでのWebアプリ(Java)を行っていました。 >私からすると、VisualStudioとか使ってコーディング、コンパイル、デバックの方が手順が多くて面倒です。 確かに玄人の方はそうですよねー。すばらしいと思います。 私はいままで統合環境での開発に慣れてきたせいもあり、なかなか馴染めないんです。。。 emacsでデバッグ環境を構築したりもしたんですが、コマンドを覚えるのが大変で。 リファレンスを見ながら開発してます。 >当初の質問がUNIXのスペックが悪いとのことでしたので、開発環境で使用許可がおりるのであればCygwinでの擬似環境開発・・・ >という選択がありますよぉ~と言うだけです。 なるほど。UNIXマシンのスペックを考えるとcygwin上で開発したほうが 同じ手順だとしても早いよということですね。 >あと気になる点としては、個人マシンにソースを持ってきていいのか!!と言うことですよね。 >どのようなルートでの開発かによっては、ソースも発注先の資産になるので、勝手にローカルに保持していちゃまずいです。 >(今は<、うるさいところはめちゃくちゃうるさい!) これに関しては、個人マシンでは無いので問題なしです。 一人2台ずつ会社から貸与されており、UNIXでの開発マシンとは 別に仕様書等作成・メール利用などのためにWindowsノートPCを利用できる状態です。

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.7

#6です。 LynxOSの開発元であるLynuxWorksのサイト(参考URL)は確認しましたか? VisualLynux以外のツールも紹介していますよ。 EclipseもLynxOS 4.xか5.xなら対応しています。 CodeWarriorも対応しているようです。

参考URL:
http://www.lynuxworks.com/rtos/lynxos.php3
yu5473
質問者

お礼

回答ありがとうございます。 開発元のサイトは確認しておりませんでした。 確認してみます。

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.6

> とある、マイナーなリアルタイムOSなんです。 そのリアルタイムOSの名前を明かさないと解決にならないと思います。 場合によっては、有償でどこかのメーカーが出しているかもしれません。 そもそも使っているコンパイラはgccなんですか?

yu5473
質問者

お礼

OSのバージョンですが、LynxOS 2.3.0です。 OSの販売元のホームページに、VisualLynuxというものが載っているのですが、使用しているOSのバージョン的に対応していない模様です。

yu5473
質問者

補足

OSはLynxというPOSIX準拠でUNIXインターフェイス を持つリアルタイムOSです。 コンパイラについては質問欄に書いたとおりgccです。 デバッガはgdbを使用しています。

  • hel-cat
  • ベストアンサー率35% (30/85)
回答No.5

#1です。 cygwinはWindows上にUNIX環境もどきが構築できる。よって、UNIX to UNIXのやり取りも可能です。 hostsに書いてあげてtelnetでloginOKです。 teratermですと、Windows側にXの環境が入らないので、GUIを使用するならXのGUI系の処理にSTBを準備しなければいけないのでは??? Xの画面のテストもターゲットとした場合、XWindowのDisplay設定がWindows上に必要になるかと・・・ #参考までにcigwinではUnixのXのソフトをHP-UXにInstall、Windows上で操作可能でした。(デバッグも・・・)

yu5473
質問者

補足

回答ありがとうございます、参考にさせていただきます。 >#参考までにcigwinではUnixのXのソフトをHP-UXにInstall、Windows上で操作可能でした。(デバッグも・・・) とありますが、デバッグはCygwin内のウインドウでemacs + gdbとかで行ったのでしょうか? これだと、コンパイル・ビルド時のエラー修正や、 ステップ実行時の手順等、すべてをUNIX上で行うのに比べて何らかのメリットがあるのでしょうか? (Windowsの画面に、Xアプリが映るくらいしか思いつきませんでした) 実際の操作感がイマイチ分からなかったので、ご教授いただけるとうれしいです。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

質問者さんがおっしゃられているように、Sambaでソースを参照して、telnet等でgccやgdbを操作すればよいと思います。 また、gccもクロスコンパイラを構築すればWindows上でコンパイルすることもできます。 gdbはリモートにすると機能の制約が大きくなるので、なるべくteknet等で動かした方がよいでしょう。

yu5473
質問者

補足

回答ありがとうございます! そうですか、「Windows上でコンパイル」は可能なんですね。可能かどうかわからなかったので、理想と書いていました。 ちょっと前進しました。 ただ、具体的にどのような環境や手順で実現するのか見えていないのですが、 何か参考になるホームページや書籍ありませんでしょうか? まずは、試しにjactaさんに教えていただいた方法でデバッグしてみました。  (1)テキストエディタで(サクラエディタ使用)Samba経由のソースを開き、編集をする。  (2)telnet経由で(teraterm使用)ビルドを行う(ここまでWindowsから操作)  (3)telnet経由でデバッグ対象アプリを起動。  (4)telnet経由でUNIX上で動いてる対象アプリにアタッチし、デバッグする。 試して不便と思ったのは、telnet経由のgccだとコンパイルエラーがターミナル上に表示される為、 修正するときに該当ソースファイルを自分で開き、該当行に自分で移動ということをしなくては ならないところです。 統合環境上のコンソール部分(?)にエラー内容が表示され、ダブルクリックしたら 指摘箇所にジャンプする等、VC++みたいなことができれば便利かなと思いました。 これはクロスコンパイラというのを構築すれば可能なんでしょうか? (2)と(3)は、teratermのマクロで自動化できるのでそんなに問題ないのですが、 (4)で、psコマンドで動いているアプリのプロセスIDを探して、 gdbでアタッチしているのですが、なかなか面倒です。 リモートデバッグを行う場合、そのへんがラクになるのでしょうか? クロスコンパイル、リモートデバッグについての疑問もあります。  ・クロスコンパイラ環境であれば、Windows上で作成したオブジェクトをUNIX上で実行できるということでしょうか?   それとも、Windows上ではコンパイルが通るかの確認のみ行えるということですか?  ・リモートデバッグは制約が多いといっても、ブレークを貼って、ステップ実行くらいはできますよね?

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.2

お使いのUNIXがLinuxであるなら、Eclipseは対応していますが・・・? Linux以外(FreeBSDやSolarisなど)でもGNOMEやKDE用に用意されている統合開発環境で代用できないのでしょうか?(GNOMEならAnjuta、KDEならKdevelop) 他にも探せば見つかりますよ。

参考URL:
http://www2.licorp.co.jp/pugly/link/displink.php3?daiCode=1&chuCode=4&shoCode=4
yu5473
質問者

補足

使用しているOSはLinuxじゃないんですよ。 とある、マイナーなリアルタイムOSなんです。 ウインドウマネージャは、twmとfvwmしか用意されていないですし。 また、UNIXマシンのスペックが低いので、Eclipseが仮に動作する 環境だとしても速度に問題あると思うので、Windowsでの開発を考えていました。

  • hel-cat
  • ベストアンサー率35% (30/85)
回答No.1

cygwinはいかがですか? Windows版のUnix擬似環境が作成できます。 標準コンパイラにgcc入っていますし、、、 UnixのXWindow設定のDisplayがWindows側にも向けられますし。。。。 #どこまで正確に動くかは?です。 参考までCygwinの環境構築のURLです http://www.mars.dti.ne.jp/~sohda/cygwin/setup.html

yu5473
質問者

補足

回答ありがとうございます。 私もcygwinを考えたのですが、それだとWindowsパソコン1台で開発が出来ますが、 結局のところ、UNIX上でvi(emacs)エディタで編集し、gccでコンパイルするのと あまり変わらないと思い、躊躇していました。 コンパイルエラー時に分かりやすくコンソールに内容が表示され、 デバッグのときにVC++のようにグラフィカルにブレークを設定できれば 開発効率が大幅にアップするんですけどね。

関連するQ&A