Como faço para gerar uma biblioteca de importação para um exe usando automake/autoconf/libtool?

StackOverflow https://stackoverflow.com//questions/20007973

  •  20-12-2019
  •  | 
  •  

Pergunta

Estou portando um aplicativo Linux com plug-ins para Windows usando mingw-w64.Gostaria de gerar uma biblioteca de importação para o exe do aplicativo principal e vincular as DLLs do plug-in a essa biblioteca de importação para que os plug-ins possam usar símbolos do exe.Isso me permitirá carregar DLLs no Windows usando a interface dlopen em win32-dlfcn.

O que não tenho certeza de como fazer é escrever regras autoconf, automake ou libtool para fazer isso.Alguém sabe como escrever essas regras ou conhece outro projeto onde essas regras são implementadas?

Foi útil?

Solução

Parece que a melhor maneira é agir pelas costas da libtool.Aqui estão alguns trechos do meu Makefile.am.

Incluir condicionalmente o dlfcn.c fonte.Você também terá que atualizar o caminho de inclusão e possivelmente colocar alguns extern "C" guardas no arquivo de cabeçalho.

if HOST_MINGW32
bali_phy_SOURCES += dlfcn-win32/dlfcn.c
endif

Você precisará ajustar os LDFLAGS do aplicativo principal para que uma biblioteca de importação seja gerada como subproduto da compilação:

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

Para compilar o plugin, passe flags diretamente para o vinculador para evitar explicar a biblioteca de importação para libtool.Você também terá que adicionar o diretório que contém seu aplicativo principal (aqui está $(top_builddir)) para o caminho de pesquisa do vinculador.

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)

O _DEPENDENCIES line faz com que o módulo dependa do aplicativo principal, de modo que o aplicativo principal e sua biblioteca de importação sejam construídos primeiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top