Проблема с автоматическим Mingw кросс-компиляции общей библиотеки, связанной с установленной статической библиотекой - PullRequest
0 голосов
/ 23 октября 2019

Я создаю тестовый исполняемый модуль hello-world, который ссылается на простую библиотеку разделяемых объектов libshared, которая, в свою очередь, ссылается на статическую библиотеку libsodium, которая была встроена в директорию зависимость. ОС Ubuntu 16.04.6 LTS.

Когда я собираю это для Linux, сборка в порядке. Когда я создаю это для Mingw, выводится это сообщение об ошибке libtool:

*** Warning: This system cannot link to static lib archive /home/ubuntu/repo/test-dll/depends/x86_64-w64-mingw32/share/../lib/libsodium.la.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have.

и сбой рецепта для цели 'libshared.la'.

Makefile.am:

.PHONY: gen
.INTERMEDIATE: $

# shared lib
lib_LTLIBRARIES = libshared.la
libshared_la_SOURCES = \
    src/example_dll.c
libshared_la_CPPFLAGS = -I$(top_srcdir)/src -I /src
libshared_la_CFLAGS = -DBUILDING_EXAMPLE_DLL -O2  -Wno-unused-parameter
libshared_la_LDFLAGS = -no-undefined
libshared_la_LIBADD = -lsodium
#libshared_la_LIBADD = $(prefix)/lib/libsodium.la

# executable
inst_PROGRAMS = testexe
instdir=$(prefix)/bin
testexe_SOURCES = \
     src/example_exe.c
testexe_CFLAGS = -DBUILDING_EXAMPLE_DLL -O2  -Wno-unused-parameter
testexe_CPPFLAGS = -I$(top_srcdir)/src
testexe_LDADD = libshared.la

Как я вызываю configure и make (build_win.sh):

export HOST=x86_64-w64-mingw32
CXX=x86_64-w64-mingw32-g++-posix
CC=x86_64-w64-mingw32-gcc-posix
PREFIX="$(pwd)/depends/$HOST"

set -eu -o pipefail
set -x

cd depends/ && make HOST=$HOST V=1 NO_QT=1
cd ../

./autogen.sh
CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix="${PREFIX}" --host=x86_64-w64-mingw32
CC="${CC} -g " CXX="${CXX} -g " make V=1

config.ac params тривиален


Единственный способ, которым мне удалось его построить, был, если явручную переместил libsodium.la в корень дистрибутива и libsodium.a в подкаталоге .libs и вручную исправил параметры libsodium.la «libdir в» (был »/ home / ubuntu / repo / test-dll /зависит от / x86_64-w64-mingw32 / share /../ lib / libsodium.a ') и от "установленного" до "нет" (было "да").

Итак, мои вопросы:

Почему он пытается связать libsodium как разделяемую библиотеку, когда она находится в каталоге «depen» и установлена ​​как «Установлено = Да» (мне нужно связать этокак статичный)?

Могу ли я иметь правильные настройки automake для MINGW, чтобы связать мою разделяемую библиотеку со статическими библиотеками в каталоге 'depen'?

1 Ответ

0 голосов
/ 24 октября 2019

Только что нашел решение (или обходной путь), как сделать эту ссылку на Mingw (и создать dll):

вместо libshared_la_LIBADD = -lsodium, которая заставляет libtool искать разделяемую библиотеку libsodium, я только что передалопция -Wl,-lsodium для компоновщика в libshared_la_CFLAGS.

...