2010-12-14 21 views
1

Cのアプリケーション開発についてはちょっとおもしろい。私が取り組んでいるプログラミング言語用のコードをたくさん書いており、 ICUから(国際化とユニコードサポートのために)。Cアプリケーションにサードパーティのライブラリを含める

サードパーティのライブラリを組み込むための規則があるかどうかはわかりません。 readlineのように、システムの多くがおそらく既にインストールされているような場合、それにリンクするだけで安全です(私は思っています)。しかし、自分のコードにライブラリのバージョンを含めたいのですが?これはよくあるのですか、これについてすべて間違って考えていますか?

+0

静的にリンクすることができます。 – Falmarri

答えて

2

コードにサードパーティライブラリが必要な場合は、ビルドする前にチェックする必要があります。 Linuxでは、少なくともオープンソースでは、これを行う標準的な方法は、Autotoolsを使ってライブラリの存在とその使用方法を探すconfigureスクリプトを書くことです。ありがたいことに、これはかなり自動化されており、たくさんの例があります。基本的には、それぞれautoconfautomakeのソースファイルであるconfigure.ac(および/またはMakefile.am)を書き込みます。それらはconfigureMakefile.inに変換され、./configureは指定した設定時オプションでMakefileを条件付きでビルドします。

これは実際にはLinuxのみであることに注意してください。私はWindows上でそれを行う標準的な方法は、IDE用のプロジェクトファイルであると思います...

1

.libであり、ランタイムリンクライブラリがない場合は、コードに準拠します。ダイナミックライブラリにリンクする必要がある場合は、インストーラを提供していることを確認するか、ユーザに入手可能な場所を指示する必要があります。

1

あなたのソフトウェアをエンドユーザに出荷して依存関係を心配している場合は、ソフトウェアを実行するのに必要な依存関係を含む正しいパッケージ/インストーラを提供するか、 (地元の法律、輸出法などなど)が、ライセンスに関するものです。

あなたのソフトウェアを構築し、ICUなどで静的にリンクしたり、ソフトウェアやICU共有ライブラリを出荷することができます。

1

対象とするOSによって異なります。 LinuxおよびUnixシステムの場合、通常、動的リンクが表示されるため、アプリケーションはシステムにすでにインストールされているライブラリを使用します。これを行うと、ライブラリをまだ持っていなければ、ライブラリを入手することはユーザーの責任です。 Linuxのパッケージマネージャは、ディストリビューションのパッケージ形式でアプリケーションをパッケージ化する場合、これを行います。

Windowsでは、通常、静的リンクが表示されます。これは、アプリケーションがライブラリをバンドルし、その特定のバージョンを使用することを意味します。多くの異なるアプリケーションで同じライブラリを使用できますが、独自のバージョンが含まれています。そのため、ライブラリの多くのコピーをシステム上に浮かべることができます。

1

あなたのコードでライブラリのコピーを出荷する際の問題は、あなたがライブラリのメンテナ'無料でバグ修正。あいまいで、小さく、サポートされていないライブラリは、一般的に静的にリンクする価値があります。それ以外の場合は、依存関係を追加して、出荷するパッケージが適切であることを確認してください。

+0

この問題は、一般的に、あいまいで、小さく、サポートされていないものを構成するものに比べて不一致です。 DebianやUbuntuのような強力なパッケージ管理システムのユーザーは、基本的に上流に維持されていない場合や、移植性が低い場合でも、配布用のパッケージを保守している人がいる場合、膨大な数のライブラリを標準的にサポートしている上流にあり、設置が困難である。あなたがそのようなライブラリに依存関係を導入した場合、より不明瞭なDIY型システムのユーザーは、あなたのためにあなたを嫌うでしょう... –

+0

@R:良い点。私のBSD boxenは一般的に派手なものを実行する必要はありませんが、それは理由のためにそれを依存関係の地獄と呼んでいます。 – nmichaels

関連する問題