LINUX.ORG.RU

Есть ли альтернативные lib файлы для компиляции под windows?

 , , , ,


0

3

Нужно использовать некоторые системные библиотеки оффтопика, но lib файлов для них нету в mingw.
Лицензия microsoft sdk гласит:

3.3 Linking .lib Files. For any Redistributable Code having a filename extension of .lib, you may distribute only the results of running such Redistributable Code through a linker with your application.

Так что файлы оттуда использовать нельзя.
Есть ли какие-то аналоги, которые можно положить вместе с исходниками?

★★★★★

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

некоторые системные библиотеки оффтопика, но lib файлов для них нету в mingw.

какие именно?

Harald ★★★★★
()
Ответ на: комментарий от Harald

теоретически их можно сгенерировать из .dll самому

Harald ★★★★★
()

А в чем проблема вообще? Просто распространяй код без этих .lib.

vazgen05 ★★★
()

Так а в чем проблема процитированного то? Там же написано: «you may distribute ... the results of running such Redistributable Code through a linker with your application.» Разве не это требуется: прилинковать .lib и получить приложение? Зачем ещё нужны SDK?

asaw ★★★★★
()
Ответ на: комментарий от derlafff

Нет, хидеры не нужны т.к сигнатуры функций и так можно достать. Нужны именно lib файлы, windows их для линковки использует.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от asaw

Хочу зависимость сборки от ddk, mingw-w64 (в нём .a файлы есть) убрать.
Код должен собираться как старым mingw, так и старой VS, так что .a не подходят.

mittorn ★★★★★
() автор топика

Есть ли какие-то аналоги, которые можно положить вместе с исходниками?

Зачем их класть вместе с исходниками? Кому надо скомпилировать, пусть сам озаботится их поиском

Harald ★★★★★
()
Ответ на: комментарий от mittorn

Класть блобы вместе с исходниками - в любом случае богомерзкое занятие. Но из того, что ты написал, вообще говоря, не следует, что ты собираешься «редистрибьютить» исходники. А если собираешься, то выше написали как правильно делать.

asaw ★★★★★
()
Ответ на: комментарий от mittorn

Он тебе деньги за это платит?

Напиши требования по сборке в README и отправь жалобщика в Шервуд пешком.

Radjah ★★★★★
()
Ответ на: комментарий от mittorn

RESOLVED WONTFIX

Предложить ему обновить компилятор. Иначе весь софт надо писать только на ANSI C, чтобы у любого пациента собиралось.

Stil ★★★★★
()
Ответ на: комментарий от mittorn

Отправь ему готовый бинарник, если он не умеет собирать сам.

asaw ★★★★★
()
Ответ на: комментарий от mittorn

дык, если он собирает их на своей машине, то у него там должны быть девелоперские приблуды типа SDK. или redist или как там он, который всю динамику студии в себе тащит, например.
у мелкософта есть одна проблема: они иногда меняют интерфейсы своих рантайм библиотек и никому об этом не говорят. хуле, копрорация жеж! поэтому лучше искать lib'ы под конкретный маздай.

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

Кажется ты хочешь pexports. Изучай документацию по mingw64 более внимательно.

anonymous
()
Ответ на: комментарий от Iron_Bug

Так проект собираеься древней (msvc6) штудией и разными версиями mingw.
Там как раз этих либ нету. Либы от новой рабтают, только вот их собой таскать нельзя.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Так код то на си, куда там cfront?

mittorn ★★★★★
() автор топика

Сделай сам из *.dll

Самый простой и всегда работающий способ, гарантированно лицензионно чистый - самостоятельно делаешь файл somedll.def где перечисляешь все нужные тебе функции из твоей dll. Можно воспользоваться всякими

dlltool -z somedll.def --export-all-symbol somedll.dll
pexports somedll.dll
gendef somedll.dll
но они не на всякой dll сработают.

LIBRARY somedll.dll
EXPORTS
Function0
Function1@4
Function2@8
Function3@12

( число после собаки - размер аргументов в байтах для stdcall. В общем случае - количество аргументов * 4 для x86-32 )

потом

dlltool -k -d somedll.def -l libsomedll.a

Пользуешь libsomedll.a для сборки, можешь его распространять и всё такое, ибо это ты его сделал.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от mittorn

для mingw пойдёт. а для vs?

Без понятия. Посмотри как в vs делаются .a при сборке .dll, там же это всё делается какой-то убогой пародией на makefile и не менее убогой пародией на binutils, так что команды для получения .a по-идее можно найти.

Stanson ★★★★★
()
Ответ на: комментарий от mittorn

А зачем тебе вообще эти файлы распространять? Напиши инструкцию, как их получить, пусть собирающий из исходников сам пердолится

Harald ★★★★★
()
Ответ на: комментарий от mittorn

либы от студии поставляются с мелкософтовским redist'ом. и он бесплатно качается с официального сайта. если там совсем гражданин из каменного века с Borland С 1.0, то это его проблемы, чем он там собирает. SDK на маздае вроде бы ещё бесплатный, с какой-то минимальной студией, потому что у них дебаггер прилеплен к студии намертво, начиная с некоторых версий. впрочем, я давно уж венду не видела живьём. может, там всё стало ещё хуже, чем десять лет назад.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

потому что у них дебаггер прилеплен к студии намертво

Для кутекреатора чтоб отлаживать собранное M$-цомпиляторами вплоть до того что ставится с 2013/2015 студиями официально советуют качнуть отдельный виндодебагер из того или иного SDK (их аж несколько).

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от Iron_Bug

ладно, поищу редисты, может найдётся где. но есть подозрение, что именно .lib только в sdk за 3+ гигов.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от Harald

Чтобы не получилось как в
https://github.com/dreamstalker/rehlds/
собрать можно только icc и 13+ штудией. где их достать не выкачав многогигабайт и не заплатив - не знаю.
А ещё там градл нужен. Просто образец как делать, чтобы случайно не привлечь разработчиков.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от mittorn

Те, кто собирают свободный софт под винду, уже привыкли к боли и страданиям, для них норм это всё. 13+ студию можно скачать бесплатно в версии Community Edition. И я никогда не видел, чтобы какой-нибудь проект распространял с собой библиотеки импорта от системных .dll винды

В конце концов, если из этих dbghelp, psapi используются 1.5 функции, можно линковаться с ними в рантайме, используя LoadLibrary()/GetProcAddress() из WinAPI, и тогда сабжевые файлики будут не нужны

Harald ★★★★★
()
Ответ на: комментарий от Harald

да я уже и подумываю так сделать. Просто фейл будет, если кто-то затрёт крупный кусок .bss. Бывало уже такое, а делать dlopen/dlsym (их в виндовые аналоги точнее) в самом крашхэндлере как-то ненадёжно.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от mittorn

в венде только так. никаких гарантий. они меняют интерфейсы. поэтому от версии к версии могут быть существенные отличия. лучше не использовать ничего, кроме самых необходимых базовых API, а их импортировать из системных библиотек. всё остальное нести с собой, в виде портированных никсовых библиотек.
мне приходилось раньше писать код, который должен был работать на всей линейке всех маздаев. он был увешан ifdef'ами чуть более, чем полностью. это боль и страдание.

Iron_Bug ★★★★★
()
Ответ на: комментарий от slackwarrior

это старые дебаггеры. раньше у них был дебаггер, который командную строку принимал и жизнь сторонних разработчиков IDE'шек ничем не омрачалась. потом они его полностью интегрировали в студию и перестали в SDK поставлять этот бинарь. поэтому сторонние разработчики обычно берут дебаггер из старых SDK. впрочем, может, они его снова вернули. я не слежу за вендой уже лет так десять.

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

Это не «старые» — это дебагеры из сдк для разработчиков дров под в том числе 10-е винды. После подключения этого дебагера (у него вполне себе гуй), QtCreator можно использовать с окружениями MSVC 12 («2013-я студия» либо «стандалон») и 14(2015-я). Единственно, 2015 (что редистрибутабл, что студия, например при установке UnrealEngine 4, проекты которого крайних версий хотят окружение 2015-й) на виндах ниже 10 может доставить геморроя, т.к. приходится руками распаковывать и пускать MSU для x86, потом x64 (сами «официальные» редистрибутаблы могут зависать и падать с «Unspecified Error» и записывать рантаймы не в те папки).

slackwarrior ★★★★★
()
Ответ на: комментарий от mittorn

Так и есть - в редистах только релизные версии dll. Если че lib от более свежей версии студии ему не подойдут т.к. будут зависеть от другой версии рантайма. Легче один раз заставить человека разморозить криокамеру чем бесконечно прыгать с бубном.

anonymous
()
Ответ на: комментарий от mittorn

где их достать не выкачав многогигабайт и не заплатив - не знаю

студия бесплатна (Community Edition)

anonymous
()
Ответ на: комментарий от anonymous

Заплатить это про штеуд.
А штудия - многогигабайт+регистрация через 30 дней.

mittorn ★★★★★
() автор топика
Ответ на: комментарий от slackwarrior

единственный «дебаггер дров» в маздае - это дебаг всей системы. система переводится в специальный режим, подключаешься через firewire с другой машины - и вперёд, к отладке системы целиком и твоего драйвера, в частности. я таким занималась много лет. но гуй там был так себе. и для отладки приложений юзерспейса это, мягко говоря, не годится. это совершенно другая система.
да и вообще, для дебаггера гуй не нужен. в смысле, он должен быть отдельно от самого дебаггера. что вполне логично. только такое решение моментально порождает кучу конкурентов, поэтому мелкософт не делится своими компиляторами с другими.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

да и вообще, для дебаггера гуй не нужен.

Ничо не знаю: https://developer.microsoft.com/ru-ru/windows/hardware/windows-driver-kit или https://msdn.microsoft.com/ru-ru/library/ff551063(v=vs.85).aspx --- «нужен-не нужен» — это можно им там попробовать рассказать :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.