build(installer): рядом с libopus кладётся libssp-0.dll

libopus.dll собирается кросс-компилятором mingw-w64, а opus по умолчанию
включает защиту стека (OPUS_STACK_PROTECTOR → -fstack-protector-strong).
В mingw эта защита живёт в отдельной библиотеке, поэтому в импортах DLL стоит
libssp-0.dll, и без неё LoadLibrary возвращает «модуль не найден» — жалуясь на
ЗАВИСИМОСТЬ, а не на саму libopus. Снаружи это выглядит как «библиотека лежит
рядом с exe, а её не видят»: ровно на это и напоролись.

Проверено разбором заголовков самой DLL: PE32+ x86-64 (разрядность верная),
экспорт полный, импорт — KERNEL32.dll, msvcrt.dll и libssp-0.dll.

Альтернатива — собирать opus с -DOPUS_STACK_PROTECTOR=OFF и не таскать файл;
выбран вариант с DLL, чтобы у кодека, который разбирает присланное браузером,
защита стека осталась.
This commit is contained in:
2026-08-26 11:10:04 +03:00
parent bc534cdc5a
commit 2defd6e456
+1
View File
@@ -34,6 +34,7 @@
Source: "__SOURCE_PATH__\__ARCH__\ewsdr_dmr.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "__SOURCE_PATH__\__ARCH__\ewsdr_dmr.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "__SOURCE_PATH__\__ARCH__\libmbe.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "__SOURCE_PATH__\__ARCH__\libmbe.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "__SOURCE_PATH__\__ARCH__\libopus.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "__SOURCE_PATH__\__ARCH__\libopus.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "__SOURCE_PATH__\__ARCH__\libssp-0.dll"; DestDir: "{app}"; Flags: ignoreversion
[Icons] [Icons]
Name: "{group}\EWSDR"; Filename: "{app}\ewsdr.exe" Name: "{group}\EWSDR"; Filename: "{app}\ewsdr.exe"