問題タブ [libtool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - libtool を正しく使用していますか?
Linux、Ubuntu 10.04 を実行しています。
autotools を使用するのは初めてではありません。私は多くの調査を行い、多くのチュートリアルに従いました。これが私がやりたいこと、私が試したこと、そして私が直面している問題です。
目標:
- libtool、autoconf、およびautomakeを使用して、Cでコーディングされた自分のライブラリをコンパイルします(そしてクロスコンパイルしますが、これは別の仕事になります)
私が試したことと私がいる場所:
ライブラリ名は FXPLib、パッケージ名は libfxplib-0.1 です。
私のプロジェクトフォルダーは次のとおりです。
/li>自動スキャンを実行し、configure.ac を取得して、次のように編集しました。
/li>私は次のように Makefile.am を書きました:
/li>- 次に、 aclocalとautoheaderを実行して、automake に必要なファイルを取得しました。
- 次に最も重要な: autoconf
- そして: automake --add-missing --copy
そこから、すべてがOKです。しかし、私はコンパイルしようとします:
こちらも全てOK...
そして、私は得る:
どこ :
- 「graphics_engine」はsrc/ subに相当します
- 「FXP_rendering.c」をsrc/sub/ file.cに
- src/sub2/ header.hに「FXP_image_s.h」
つまり、automake はサブディレクトリの .c ファイルをコンパイルできますが、これらのファイルに他のサブディレクトリにあるプライベート .h ファイルを含めることはできません。
私の問題は次のとおりです。すべてのサブディレクトリ内のすべてのファイルを、すべて同じ場所にあるかのようにコンパイルするようにautomakeに指示する方法は?
私が理解できることを願っています(私はフランス人なので、私の言葉にいくつかの問題があることをお詫びします)
よろしくお願いします。
vmware - リンクを使用せずにlibtoolを使用する
私Makfile
はlibtool
いくつかのapacheモジュールを作成するために使用しています。
残念ながら、VMWare共有フォルダー(hgfs
)で動作するようにmakefileが必要です。これは、いかなる種類のリンク(シンボリックリンクまたはハードリンク)もサポートしていません。
スクリプト内の変数にパッチを適用せずに、の代わりに使用libtool
して使用させることはできますか?したがって、システムの残りの部分を中断し、将来のアップグレードを防ぐことができますか?cp
ln -s
LN_ST
libtool
libtool
shared-libraries - 求められる説明:libtool、automake、共有ライブラリ(およびFortran)
私が抱えていた問題は解決されました。ソリューションが実際に機能する理由についての説明を求めるために、これを投稿しています。私は以前ここで素晴らしいフィードバックを得ました。
私は非常に単純なビルドシステムを使用したレガシーコードベースを持っています。私のプロジェクトは、カスタマイズ、特に共有ライブラリのビルドのためにそれをAutotoolsに移行することです。メインライブラリはCで記述されていますが、Fortranからリンク可能である必要があり(レガシー目的)、F77でいくつかのテストコードとともに配布されます。著者はソースコードをモジュールに編成しました...
彼らlib/libmain.a
は、src _ * /ディレクトリにコードをコンパイルし、ranlibを使用してオブジェクトをアーカイブすることにより、ライブラリを構築しました。
私の最初のアプローチは、各src _ * /から個別に共有ライブラリを構築し、これらすべてを1つの共有ライブラリに「リンク」することでした。Autotoolsを使用するsrc_module1/Makefile.am
と、
他のモジュールについても同様で、最後にlib/Makefile.am
必要なのは次のとおりです。
これは完全に機能しているように見えました。ただし、testc /のコードがコンパイルされ、libmain.laに対してリンクされると、「シンボルが見つかりません」というエラーが発行されました。
これはlibtoolまたは共有ライブラリの問題だと考えて、静的のみをビルドし、基本的にすべてをに変更して.la
みました。同じ問題。ただし、今回は、libmain.a自体をリンクしようとすると、「ranlib:ライブラリの警告:libmain.a目次が空です(ライブラリ内のオブジェクトファイルメンバーがグローバルシンボルを定義していません)」というエラーに注意してください。.a
_LTLIBRARIES
_LIBRARIES
私が見つけた解決策はハックのようです。src _ * /ディレクトリのいずれにもMakefileを作成しませんでしたが、代わりにlib /ディレクトリにのみ使用し、そのMakefile.amには次の行がありました。
これはうまくいきました。testc /でコンパイルされたプログラムは、問題なくlibmain.laに対してリンクされています。「モジュール」の1つは、ライブラリ内の他のC関数をラップするFortranバインディングのセットです。testf77 /のFortranコードでさえ、libmain.laに対して適切にリンクされています。
libtoolが共有ライブラリを構築するとどうなるかを誰かが注意深く説明できますか?または、静的ライブラリを構築する場合でも?複数の静的ライブラリをリンクして1つの静的ライブラリを作成できないのはなぜですか?libtool / ranlibが「ソースから」ライブラリをビルドする場合にのみシンボルが使用できるのはなぜですか?そして、共有/静的ライブラリをインストールする、つまり/ usr / local / libに移動するのはどうですか?---そこで何が起こりますか?静的ライブラリと共有ライブラリに関するウィキペディアの記事は、私にとって十分に詳細ではありません。
私の長年の質問を理解するためのあらゆる努力に感謝します。
c - libltdl のモジュール参照カウントへのアクセス
Cコードでlibltdlを使用して、libtoolで作成された共有オブジェクトファイルを動的にロードしています。libtool のバージョンの dlopen によって返されるモジュール ハンドルごとに参照カウントが内部的に保持されているようです。この参照カウントにアクセスする方法はありますか?
c - automakeとlibtoolのリンクされたlibの問題
こんにちは私はClibtoolライブラリを開発しています。依存関係libxml2の追加に問題があります。私はGNUautotoolsを使用することにしました、バット私は非常に初心者です。
configure.acには次のものがあります。
MakeFile.acの場合:
configureスクリプトは正しく出力します:
生成されたMakefileには次のものがあります。
Makeを起動すると:
makeコマンドはlibxml2をリンクしません、誰かが私を助けてくれますか?
compilation - libptraceのコンパイル
libptraceをコンパイルしようとしています(http://sourceforge.net/projects/libptrace/)。プロジェクトは、サポートを要求するための好ましい手段を宣伝していません(残念ながら、このプロジェクトは助けを得る最良の方法を示していません)。とにかく、私が直面している問題は次のとおりです。
libptraceとlibgnu.laをグーグルで検索すると、ヒット数はゼロになります。ソースでそれを取得すると、gitから新鮮になります。
libtoolアーカイブファイルを生成する方法がわかりません。ソースには、それ以外の方法でmakeターゲットやスクリプトがないようです。
管理者に関するメモ:この質問にタグ `libptrace'を追加してください-明らかに非常に人気のあるトピック-1.5Kポイントカウントを満たしていないため、追加できません:(
Melによるbuild.shの修正に応じて、`make'で生成される新しいエラーは次のとおりです。
c++ - libtoolベースのプロジェクトで-rpathと$ORIGINを使用しますか?
私は、おそらく非標準的な方法で、libtoolベースのパッケージを自分のプロジェクトに組み込んでみようとしています。これが私の目標です:
外部プロジェクトを構築する:
/li>実行時に外部プロジェクトの共有ライブラリと実行可能ファイルに依存する独自のプロジェクトをビルドします。
/li>すべてを単一の「ローカライズされた」tarballにパッケージ化します...つまり
$HOME/blah
、ビルドホストにすべてを入れている間に、環境に煩わされることなく、tarballを任意のディレクトリ(他のホスト)に抽出できるようにします。その目的は、私のプロジェクトの複数のバージョンを、厄介な「他家受粉」なしに並べて共存できるようにすることです。
プロジェクトに使用-rpath '$ORIGIN/../lib'
して、実行時に適切な共有ライブラリが常に読み込まれるようにすることができます。-rpath
ただし、libtoolは、の正確なパスに基づいて独自の設定を割り当てることを主張しているようです$HOME/blah/lib
。これは、すべてを別のディレクトリ(たとえば$HOME/blah.2011-06-02
)に解凍すると壊れます。
この制限を回避する方法はありますか?このトピックについて、debianとlibtoolの人々の間でかなり長いrpathの議論が見られますが、それはやや古く、「私たちは同意しません」を超えて決定的ではありません。
makefile - libtool: 'make' コマンドはエラーなしで終了しますが、実行可能ファイルは作成されません
autotools と libtool を含むプロジェクトで「make」を実行すると、ライブラリは正しくビルドされますが、実行可能ファイルがそのパスに作成されません。これはautomakeによって生成された行です:
この行は何も出力しません (エラーも)。この Makefile.am に何か問題がありますか?
gcc - Linux /Ubuntu10.10でOpenLDAPforMIPSをクロスコンパイルします
実際にライブラリであるptlib-2.10.1/opal-3.10.1に依存しているため、mipsel-angstrom-linuxツールチェーンを使用してUbuntu10.10開発マシンでopenldap-2.4.23をクロスコンパイルしようとしています。使いたい。
build.sh
以下に示す内容のスクリプトを設定しました。それ
ビルドは機能しますが、次のように中止されます。
他のライブラリにも問題がありました。追加LIBTOOL=libtool
することで問題を解決できました。他のリソースで提案されているように、自分でコンパイルしようとしましmipsel-angstrom-linux-libtool
たが、うまくいきませんでした。
source / buildディレクトリでを実行しましたgrep libz -r .
が、何も見つかりませんでした。どこを見ればよいかわかりません。
誰かが私の問題を解決するためのヒントをくれたらいいのにと思います。
編集:コードソースツールチェーンを使用して取得しresult.c:961: undefined reference to lutil_memcmp'
ます。
unix - automake、libtool、および rpmbuild を連携させる方法
automake
と を使用してビルドされたパッケージの RPM を作成しようとしていますlibtool
が、問題が発生しました。rpmbuild
パッケージのインストール済みプログラムに、パッケージの共有可能なライブラリのインストール ディレクトリのパス名が含まれていることを発見すると、中止されます (ののオプションautomake
の使用)。-rpath
ld
rpmbuild
パッケージが再配置可能であることを保証するためにこれを行うことを理解しています。私の質問は、それについて何をすべきかです。共有可能なライブラリの使用を排除する (そしてその利点を失う) かautomake
、共有可能なライブラリをインストールしないように指示し (オプションの使用を停止し-rpath
ます)、とにかくそれらをインストールすることができます。この後者のオプションの代償は、ユーザーが常に正しく設定された環境変数を持っている必要があることです。LD_LIBRARY_PATH
別のオプションはありますか?
あなたならどうしますか?