2009-08-21 26 views
5

Linux用に設計されたC++プロジェクト(g ++/raw Makefile)を使用しています。今、私は、静的にも動的にもリンクされたバイナリを構築したいと思います。次のコマンドは、Makefileで動的ライブラリ(libtestなど)をビルドするために使用されます。linux(Makefile)で自分自身の動的ライブラリを使用する方法

$(CXX)-shared -Wl、-soname、libtest.so.1 -o libtest.so.1.0.0 $ > libtest.so.1.0.0 - LIBTEST_OBJS)

出力はので、私は、少なくともシンボリックリンクlibtest.soを見つけ

libtest.so.1名前を持っていlibtest.so.1.0.0です上記のlibtest.so.1.0.0ライブラリを実際に使用するクライアントプログラムをリンクする必要があります。

ここで私のソフトウェアをビルドしたいのですが、上記のシンボリックリンクを管理する標準的な方法は何ですか?明らかに私はソースディレクトリにこのような余分なものは望んでいませんが、クライアントのバイナリをビルドする必要があります。クライアントをビルドするための一時リンクとして作成し、完了したら削除しますか?作成する.soライブラリとそのリンクをホストするディレクトリを作成し、 "make install"を実行して他の指定されたディレクトリにインストールするまでそこにすべてを残しますか?これを行うための標準的な方法は今のところ涼しいでしょう。

または、ライブラリの生成方法が間違っていますか?実行可能ファイルをリンクするlibtest.so(リンクではなく実際のライブラリとして)を生成し、ライブラリの名前を変更して `` make install ''を実行するときにそれらのリンクを作成しますか?

任意の入力が評価されます。 :)

答えて

1

確かに実際のリンクとしてlibtest.soを生成しないでください。通常、共有ライブラリ開発ファイルをインストールすると、.hファイルがインストールされ、作成する必要のあるインストールスクリプトの一部として、libtest.soというシンボリックリンクが作成されます。

バイナリのビルドプロセスでライブラリを使用するだけで開発ファイルをインストールしている場合は、メークファイルからシンボリックリンクを作成するだけです。

ここにはあまり標準はありません。別のビルドディレクトリに成果物を構築する方が好きで、 ソースディレクトリにビルドされているかどうかは気にしない人もいます。しかし私は別のディレクトリにビルドし、.o/.so /実行可能ファイルのソースディレクトリをきれいに保ちます。

あなたはこのような状況を扱うlibtoolを使用するhere

1

私の提案は有用な情報を見つけるかもしれません。

+0

+1 libtoolを使用すると、最終的にLinuxから別のものに移植することが容易になります.libtoolは、共有ライブラリのすべてのプラットフォーム依存の問題を処理します。 –

関連する問題