LINUX.ORG.RU

Собирается статически(golang), но при запуске требует dll

 


0

2

Всем привет.

Команда для сборки:

GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++-posix go build -ldflags '-linkmode external -extldflags "-static"' -x .

в go файле имеется строка (liblz4.dll.a есть):

#cgo windows LDFLAGS: -llz4.dll 

сборка проходит без ошибок, но:

objdump -x cmd/app/app.exe | grep 'DLL Name:'
	DLL Name: liblz4.dll

При запуске (на винде), говорит нет liblz4.dll. Если положить dll, то программа работает. Что я упустил?



Последнее исправление: wncpw (всего исправлений: 1)

UPD: Методом тыка удалось выяснить, что собирается как надо если, выкачать отсюда https://github.com/lz4/lz4/releases/tag/v1.9.4 архив, в папке static есть:

liblz4_static.lib: current ar archive

его переим-ем в *.a и все работает.

Объясните в чем разница, этого файла который у меня изначально. И вот этим скачаным. Я почему то думал, что это и есть статическая библиотека (liblz4.dll.a), почему с ней не завелось?

wncpw
() автор топика
Последнее исправление: wncpw (всего исправлений: 2)
Ответ на: комментарий от wncpw

Объясните в чем разница, этого файла который у меня изначально. И вот этим скачаным. Я почему то думал, что это и есть статическая библиотека (liblz4.dll.a)

Как бы .dll.a и просто .a – разные вещи в мире MinGW. Первая библиотека фейковые статические либы-хелперы, они пустышки, но определяют то, что приложение будет требовать конкретную DLL’ку.

А второй формат это действительно чистые статические библиотеки.

https://stackoverflow.com/questions/13998575/mingw-creating-dll-a-files-what-type-of-library-files-are-those

Зачем так было сделано – не знаю. Возможно чтобы поддерживать какие-то чисто мелкософтовские особенности линковки динамических библиотек.

EXL ★★★★★
()