2008-09-02 6 views
2

共有ワークスペースで使用されるツールを記述します。このスペースには複数のOSが動作しているため、一般にPythonを使用して、複数のマシンにインストールされているバージョンを標準化しています。しかし、C言語でいくつかのことを書こうと思っていたら、アプリケーションをPythonスクリプトでラップして、オペレーティングシステムを検出し、正しいバージョンのCアプリケーションを起動させることができるかどうか疑問に思っていました。各プラットフォームにはGCCがあり、同じシェルを使用します。共有マルチプラットフォームPOSIX環境でのCの使用

1つのアイデアは、タイムスタンプとCコードとの比較でローカルの〜/ binというユーザーにコンパイルされたCを持つようにしたので、コードが更新されたときだけコンパイルされます。もう一つは、各プラットフォーム用にコンパイルし、ラッパースクリプトに適切な実行可能ファイルを選択させることでした。

これには承認/安定プロセスがありますか?キャッチはありますか?選択肢がありますか?(ネイティブCコードを絶対に使用する必要があると仮定して)

説明:ABIを共有しない複数のOSが関係しています。例えば。 OS X、さまざまなLinux、BSDなど。私は、共有フォルダ内のコードを更新して、新しいコードを多かれ少なかれ瞬時に動かせるようにする必要があります。バイナリまたはソースパッケージの配布は理想的ではありません。

答えて

0

あなたが知っている静的リンクを見てください。

最近、私たちはすべて巨大なハードドライブを持っています。そして、数メガバイト(libcを持ち歩くためのものではありません)は本当にそれほど大きな問題ではありません。

また、アプリケーションをchroot()で実行して配布することもできます。

0

OSの種類によっては、システムのクラスごとにパッケージを作成する方がよい場合があります。

また、すべてが同じABIおよびハードウェアアーキテクチャを共有している場合は、静的バイナリをコンパイルすることもできます。

1

また、autoconfを使用してアプリケーションをソース形式でのみ配布することもできます。 :)

2

実行する正しいバイナリを選択するだけのPythonインタプリタインスタンスを起動すると、必要以上に重いことになります。エイリアスを提供するシェル.rcファイルを配布したいと思います。

/shared/bin/toolname-mac、/ share/bin/toolname-debian-x86、/ shared/bin/toolname-netbsd-dreamcastなど、さまざまなバイナリを置くことができます。共通の共有シェル.rcファイルでは、OSX上で別名toolname =/shared/bin/toolname-macなどを取得できるように、プラットフォームに応じてエイリアスを設定するロジックを設定します。

ユーザがエイリアスをリロードする必要があるため、常に新しいツールを追加している場合は、この機能はうまくいかないでしょう。

ただし、この方法でツールを配布することはお勧めしません。ツールの新しいビルドをテストして適格性を確認するには、ユーザーにツールを配布するのに必要な余分な時間がかかりません。あなたは配布時間を短縮するために最適化されているようです。ライブ環境で素早く実行されるツールを置き換えることは、特にツールの作成や作成において何か問題が生じた場合、時間がかかり混乱するダウンタイムを招く可能性があります。

+1

Pythonインタプリタは重くありません少なくともすでに広範囲に使用している* nix環境ではありません。始動時間は無視できる、おそらく50ミリ秒です。 – postfuturist

関連する問題