私は他の人が持っているのと同じ問題を抱えています:
- Automakeプロジェクトでlibtoolによって生成された
*.laファイルがあります (例: )。module.la - しかし、それを使用するにはが必要
*.sodlopen()です(例:module.so)。
--disable-sharedただし、プロジェクトは、作成されたメインバイナリが静的にリンクされた1つの大きなプログラムであることを確認するために構成およびビルドされます。たとえばmain.x、展開とデバッグが容易になります。したがって、*.soファイルは作成されません。
このプログラムは、静的にリンクされているにもかかわらず、main.x拡張機能 (モジュール) をロードできる巨大なフレームワークのようなアプリケーションです。dlopen()
これは、手動でビルドするときにうまく機能module.soします。しかし、これを機能させることは私にMakefile.amは不可能に思えます。はい、書くことはできますlib_LTLIBRARIESが、私の標準--disable-sharedではファイルを取得できません*.so。
lib_LTLIBRARIES = module.la
module_so_SOURCES = module.cpp
ファイルmodule.laが作成されますが、dlopen()ロードは拒否されます (もちろん)。
Makefile.am私はそれを手動で構築するためにルールを入れようとしましたが、それはうまくいきます:
# Makefile.am (yes, .am)
all: mm_cpp_logger.so
SUFFIXES = .so
%.so: %.cpp
$(CXX) $(CXXFLAGS) -fPIC -fpic -c -I $(top_srcdir)/include -o $@ $<
%.so: %.o
$(CXX) $(LDFLAGS) -shared -fPIC -fpic -o $@ $<
しかし、これは回避策にすぎません。依存関係チェックやインストールなどの優れた自動機能をすべて利用できるわけではありません。
途中で(または同じ効果で)module.soメインプログラムをビルドしたままビルドするにはどうすればよいですか?--disable-sharedMakefile.am
- 特別な automake ルールを使用して、
*.laファイルをファイルに後処理できますか?*.so - いずれにせよ、ファイル
lib_LTLIBRARIESを作成するプロセスを微調整できますか?*.so