Plugins 如何使用automake/autoconf/libtool为exe生成导入库?

Plugins 如何使用automake/autoconf/libtool为exe生成导入库?,plugins,dll,mingw,libtool,Plugins,Dll,Mingw,Libtool,我正在使用mingw-w64将一个带有插件的Linux应用程序移植到Windows。我想为主应用程序exe生成一个导入库,并将插件DLL链接到这个导入库,以便插件可以使用exe中的符号。这将允许我使用win32 dlfcn中的dlopen接口在Windows上加载DLL 我不确定如何编写autoconf、automake或libtool规则来实现这一点。有人知道如何编写这样的规则吗,或者知道在另一个项目中实现这些规则吗?似乎最好的方法是躲在libtool后面。下面是我的Makefile.am的一

我正在使用mingw-w64将一个带有插件的Linux应用程序移植到Windows。我想为主应用程序exe生成一个导入库,并将插件DLL链接到这个导入库,以便插件可以使用exe中的符号。这将允许我使用win32 dlfcn中的dlopen接口在Windows上加载DLL


我不确定如何编写autoconf、automake或libtool规则来实现这一点。有人知道如何编写这样的规则吗,或者知道在另一个项目中实现这些规则吗?

似乎最好的方法是躲在libtool后面。下面是我的Makefile.am的一些摘录

有条件地包括
dlfcn.c
源代码。您还必须更新include path,并可能在头文件中放置一些
extern“C”
guard

if HOST_MINGW32
bali_phy_SOURCES += dlfcn-win32/dlfcn.c
endif
您需要调整主应用程序的LDFLAGS,以便生成一个导入库作为编译的副产品:

if HOST_LINUX
bali_phy_LDFLAGS = -rdynamic
else
if HOST_MINGW32
bali_phy_LDFLAGS = -Wl,--export-all-symbols,--out-implib=libbali-phy.dll.a
else
bali_phy_LDFLAGS =
endif
endif
要编译插件,请直接将标志传递给链接器,以避免向libtool解释导入库。您还必须将包含主应用程序的目录(此处为其
$(top\u builddir)
)添加到链接器搜索路径

if HOST_MINGW32
EXTRADEPENDENCIES = bali-phy.exe
EXTRALDFLAGS = -L$(top_builddir) -Wl,libbali-phy.dll.a
else
EXTRADEPENDENCIES =
EXTRALDFLAGS =
endif

mod_la_SOURCES = computation/builtins/mod.C
mod_la_LDFLAGS = -module -shared -avoid-version -export-dynamic -no-undefined -enable-runtime-pseudo-reloc $(EXTRALDFLAGS)
mod_la_DEPENDENCIES = $(EXTRADEPENDENCIES)

\u DEPENDENCIES
行使模块依赖于主应用程序,因此首先构建主应用程序及其导入库。

FTR,如果您仍然使用
libtool
,也可以使用
libltdl
加载模块。同样,同样的
--out implib
方法也适用于加载插件的库,插件反过来使用该库中的函数。If已经提出了一个带有插件的库的概念验证实现,它解决了我过去经常遇到的链接问题(直到我读到这个答案)。