我和其他人有同样的问题:
- 我在Automake项目中有一个由libtool
*.la生成的文件(例如),module.la - 但我需要
*.so它来使用它dlopen()(例如module.so)。
但是:项目的配置和构建是--disable-shared为了确保创建的主二进制文件是一个大的静态链接程序,例如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
- 我可以
*.la将*.so文件后处理为具有特殊自动生成规则的文件吗? - 在任何情况下我都可以调整
lib_LTLIBRARIES创建文件的过程吗?*.so