首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用automake/autoconf/libtool为exe生成导入库?

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

Stack Overflow用户
提问于 2013-11-15 18:21:35
回答 1查看 357关注 0票数 3

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

我不知道如何编写autoconf、automake或libtool规则来实现这一点。是否有人知道如何编写这样的规则,或者知道其他实现这些规则的项目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 23:24:55

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

有条件地包括dlfcn.c源。您还必须更新包含路径,并可能在头文件中放置一些extern "C"保护。

代码语言:javascript
复制
if HOST_MINGW32
bali_phy_SOURCES += dlfcn-win32/dlfcn.c
endif

您需要调整主应用程序的LDFLAGS,以便将导入库生成为编译的副产品:

代码语言:javascript
复制
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_builddir))的目录添加到链接器搜索路径。

代码语言:javascript
复制
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)

_DEPENDENCIES行使模块依赖于主应用程序,从而首先构建主应用程序及其导入库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20007973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档