我和其他人有同样的问题:
- 我在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-shared
Makefile.am
- 我可以
*.la
将*.so
文件后处理为具有特殊自动生成规则的文件吗? - 在任何情况下我都可以调整
lib_LTLIBRARIES
创建文件的过程吗?*.so