Я создаю тестовый исполняемый модуль 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'?