Сборка кроссплтаформенных либ под винду
От: Evgeniy Skvortsov Россия  
Дата: 21.02.18 21:33
Оценка: +3
Не уверен что вопрос для данного раздела, но не смог сделать правильный выбор.

Вопрос о сборке opensorce проектов в виде библиотек под windows.

Вкратце мой однажды внезапно успешный опыт. Как-то давно, делал я ради фана приложение работающее с файлами некой игры.
По мере развития оказалось, что часть данных этой игры может быть пожата zip`ом.
Пришлось подключать библиотеку zlib (если не ошибаюсь) для корректной поддержки такого вида данных.

После скачивания исходников меня настигла тоска и уныние. Поскольку сборка этого вашего хваленого опенсорса под винду — это Адъ и Израиль!
И что-то я психанул, создал в MSVC пустой проект для .lib файла, закинул туда все .h и .c файлы из исходников zlib. Подробностей уже не помню, но без всякого гемора MSVC собрал рабочую библиотеку, которую я успешно дальше использовал в своей программке для распаковки пожатых данных.

И вот сейчас, когда судьба опять подкинула сюрприз, в виде необходимости использовать опенсорсную либу, но которая без танцев с 3-мя бубнами одновременно нормально собирается только под линукс — у меня вопрос: А есть ли какая-то рабочая схема, по которой можно собрать любой кроссплатформенный опенсорс в виде нативной MSVC бибилиотеки.

В оригинале OpenSSL собирается каким-то привычным для опенсорс извратным способом.

Но я видел готовые сборки собранные для MSVC и имеющие привычный набор .lib для разных ключей сборки проектов /MTD /MT ... ещё чего-то там.

В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка...

Или это в общем случае невозможно?

Просто я в последний раз видел такую систему сборки, которая после скачивания репозитария с гитхаба — некомпилябельна вообще. Исходники сперва нужно причесать километровыми скриптами, под определенную платформу, которые создадут ещё кучу файлов .h и .c, и только после этого можно запускать сборку проекта.
Я конечно далек от мира промышленного ПО, но на мой взгляд это какой-то ужас!
Или это норма в наше дни?

Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.

Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.
Re: Сборка кроссплтаформенных либ под винду
От: reversecode google
Дата: 21.02.18 22:03
Оценка:
ES>В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка...
ES>Или это в общем случае невозможно?

в базовой версии openssl невозможно
в базовой нету того виндовс программиста который бы занимался такой поддержкой

ES>Или это норма в наше дни?


норма
мало проэтов которые поддерживаются и виндовс программистами
и еще меньше которые бы под винду писали опенсорс
опенсорс пришел из мира юникс — отсюда и все неудобности в либах итд

ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.


руками

ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.


с миру по нитке, каждый по чуть чуть и получается огогоо

ps зачем брать openssl ? возьмите любую другую либу

я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ?
— ну как же?! создаем зашифрованный канал связи!
после этой фразы я куею, и отвечаю что для этого достаточно простенького DH/RSA/AES256
я бы еще понял если это использовалось для https как сервер или клиент для совместимости
но для своих каналов связи городить такие трехматовые конструкции на openssl это пять
Re[2]: Сборка кроссплтаформенных либ под винду
От: Evgeniy Skvortsov Россия  
Дата: 21.02.18 22:16
Оценка:
Здравствуйте, reversecode, Вы писали:

R>в базовой нету того виндовс программиста который бы занимался такой поддержкой


Ну как нет? Я же скачивал уже собранный OpenSSL под винду с либами под MSVC
И даже рецепт есть сборки моей требуемой либы через MSVC, но он не сработал, то ли старый слишком, то ли ещё что.
Я фиксил ошибки сборки пока ума хватило, потом зашел в тупик, просто не знаю, что с теми ошибками делать дальше.

R>я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ?


Да это не я тяну, это либа которую я собираю хочет OpenSSL.
Re[3]: Сборка кроссплтаформенных либ под винду
От: reversecode google
Дата: 21.02.18 22:21
Оценка:
я имел ввиду тех программистов которые бы поддерживали файлы проектов студии

а поддерживают они mingw
потому у них все собирается
msvc вроде как собирается
но никто не контролирует

ну тогда надо с ошибками где на чем не собирается приходить на форум
а то конструктива не будет
Re[4]: Сборка кроссплтаформенных либ под винду
От: Evgeniy Skvortsov Россия  
Дата: 21.02.18 22:38
Оценка:
Здравствуйте, reversecode, Вы писали:

R>а поддерживают они mingw

R>потому у них все собирается

Да даже с MinGW проблемы — с неправильными ключами не собирается. Какие правильные — ХЗ. Мануалов в инете не мало, у всех разные ключи, пока все перепробуешь — охренеешь.
И каждый утверждает, что его вариант верный. Может он и верный был пару лет назад. Актуальной информации 0.
Разработчики вообще игнорируют сборку. И это понятно, правильную сборку они продают за огромные бабки. А тебе достается куча .h и .c файлов. И делай с ним всё что хочешь.
Это не проблема с миру по нитке, это целенаправленная политика.

Что бы не быть голословным — Sqlcipher. Я хоть её и собрал, но нормально она так и не заработала.
На сайт производителей написано — хотите собранные либы под все платформы, оттестированные, с поддержкой и прочими ништяками — давайте кучу бабла.
Нет — вон там исходники, трахайтесь с ними как хотите.

Какой-то чувак из рунета предлагал свои наработки в открытом доступе для сборки этой либы под MSVC, но то ли инфа неактуальная, то ли всё это брехня — не собирается. Валится куча ошибок, часть удалось устранить, остальные — не знаю что с этим делать.


R>ну тогда надо с ошибками где на чем не собирается приходить на форум

R> а то конструктива не будет

В таких вопросах не будет конструктива, если только это не супер популярная бибилиотека.
Re[5]: Сборка кроссплтаформенных либ под винду
От: reversecode google
Дата: 21.02.18 22:46
Оценка:
это все эмоции
выхлоп лога в чем там не собирается, будет ?

в мингв оно всегда должно собраться, так как мингв тот же гцц
главное брать правильную версию и его сопутствующие утилиты
Re[6]: Сборка кроссплтаформенных либ под винду
От: Evgeniy Skvortsov Россия  
Дата: 21.02.18 22:59
Оценка:
Здравствуйте, reversecode, Вы писали:

R>это все эмоции


Тут ты прав.

R>выхлоп лога в чем там не собирается, будет ?


Да собрал я уже, два дня прошло.

R>в мингв оно всегда должно собраться, так как мингв тот же гцц

R>главное брать правильную версию и его сопутствующие утилиты

Проблема в нюансах, тут
Автор: Evgeniy Skvortsov
Дата: 21.02.18
более подробно описал.

Ради интереса завтра закину ошибку, интересно просто, эти ошибки кому-то о чем-то говорят?
Отредактировано 21.02.2018 23:01 Evgeniy Skvortsov . Предыдущая версия .
Re: Сборка кроссплтаформенных либ под винду
От: Zhendos  
Дата: 22.02.18 01:15
Оценка: 1 (1) +1
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Не уверен что вопрос для данного раздела, но не смог сделать правильный выбор.



ES>В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка...


ES>Или это в общем случае невозможно?



В общем случае конечно невозможно, каждый естественно может написать
свою систему сборки и задействовать в своем проекте,
но есть такие системы как https://conan.io/ и https://github.com/Microsoft/vcpkg
там уже собранные библиотеки для популярных проектов, которые можно подключить
единообразным способом.

ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.

ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.

Если имеется ввиду configure и Makefile, то эти файлы генерируются из совсем небольших файлов.
А так да, после того как эти скрипты сгенерированы из configure.in/configure.ac и Makefile.am
архив с исходным кодом получается довольном большим, это одна из причин почему cmake стал таким популярным.
Отредактировано 22.02.2018 9:45 Zhendos . Предыдущая версия .
Re[2]: Сборка кроссплтаформенных либ под винду
От: Evgeniy Skvortsov Россия  
Дата: 22.02.18 01:36
Оценка:
Здравствуйте, Zhendos, Вы писали:

Z>Если имеется ввиду configure и Makefile, то эти файлы генерируются из совсем небольших файлов.

Z>А так да, после того как эти скрипты сгенерированы из configure.in/configure.ac и Makefile.am

Ну да, на моем небольшом опыте, даже эти configure тормозятся из-за фатал ерор.
Что бы не быть голословным, тот же sqlcipher не собирается, пока ему не задать опцию -disable_tcl
Пишу по памяти, но смысл в том, что по умолчанию сборка обрабатывается какими-то tcl скриптами. И на этих скриптах возникает ошибка. Что она означает я ХЗ.

Там ошибка типа "TK_FLOAT — значение не найдено". Где не найдено? в каком месте не найдено? в какой программе не найдено? На каком языке это всё написано?
Там скрипт размером примерно 65 Кб. И неизвестно что он ещё вызывает для своей работы. Попробуй найди в нем, где там что не найдено.

Z>архив с исходным кодом получается довольном большим, это одна из причин почему cmake стал таким популярным.


Тут не понятно
Re[3]: Сборка кроссплтаформенных либ под винду
От: Zhendos  
Дата: 22.02.18 10:51
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Здравствуйте, Zhendos, Вы писали:


Z>>Если имеется ввиду configure и Makefile, то эти файлы генерируются из совсем небольших файлов.

Z>>А так да, после того как эти скрипты сгенерированы из configure.in/configure.ac и Makefile.am

ES>Ну да, на моем небольшом опыте, даже эти configure тормозятся из-за фатал ерор.

ES>Что бы не быть голословным, тот же sqlcipher не собирается, пока ему не задать опцию -disable_tcl
ES>Пишу по памяти, но смысл в том, что по умолчанию сборка обрабатывается какими-то tcl скриптами. И на этих скриптах возникает ошибка. Что она означает я ХЗ.
ES>Там ошибка типа "TK_FLOAT — значение не найдено". Где не найдено? в каком месте не найдено? в какой программе не найдено?

Вы не совсем правильно понимаете ситуацию, "--disable-something" означает выключение поддержки чего-то
в проекте.

Никто сборку никаким "tcl" не обрабатывает. В данном случае скорее всего выключает
в проекте возможность компиляции расширения для языка TCL, позволяющего работать
с этим sqlcipher на языке tcl. Если вы не выключаете эту возможность, то "configure" будет искать
библиотеки, утилиты нужные для компиляции расширения tcl. Обычно "configure" пишет краткую ошибку,
и что-нибудь типа см. config.log для полного понимания ситуации, в этом или аналогичном файле обычно
и указано какая именно фича системы проверялось и что именно сломалось.

> На каком языке это всё написано?


posix shell

ES>Там скрипт размером примерно 65 Кб. И неизвестно что он ещё вызывает для своей работы. Попробуй найди в нем, где там что не найдено.


Вообще configure файл sqlipper судя по github 443K, а вот "исходный" код configure.ac 24K,
не мало, но и 24K не много. Вся идея autconf/automake что для своей работы он требует минимум —
/bin/sh совместимый shell и еще по мелочи, то есть заработает почти на любом *nix с минимум
установленного ПО.


Z>>архив с исходным кодом получается довольном большим, это одна из причин почему cmake стал таким популярным.


ES>Тут не понятно


Что непонятного configure 443K vs CMakeLists.txt в 4K, по-моему здесь все понятно.
Да в отличии от configure, на *nix системе теперь должен быть установлен cmake,
но этим можно пожертвовать плюс к этому windows поддержка из коробки.

Но вообще непонятно зачем вам нужен configure, вы же на Windows собираете?
Вся идея autoconf/automake это работа на *nix ОС, где они работают из коробки,
в windows заработает разве что в windows 10 с включенной linux подсистемой.

Но разработчики sqlcipher позаботились об этом и предоставили nmake файл,
разве nmake /F Makefile.msc в консоли visual studio не работает?
Re: Сборка кроссплтаформенных либ под винду
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.02.18 13:42
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.


Эти скрипты, их рожает специально обученная тулза.

Просто в юнихе все, что нужно этой тулзе и рожденной ей скриптам либо есть в системе из коробки, либо ставится легко и без усилий. А в венде, наоборот, всего этого обычно нет, и поставить непросто.
Re[2]: Сборка кроссплтаформенных либ под винду
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.02.18 13:46
Оценка: +1
Здравствуйте, reversecode, Вы писали:

R>я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ?

R>- ну как же?! создаем зашифрованный канал связи!
R>после этой фразы я куею, и отвечаю что для этого достаточно простенького DH/RSA/AES256

И правильно делают, что берут. Еще не хватало, чтобы они делали самодельные криптопротоколы на базе перечисленных тобой кирпичиков. Я представляю себе, чего они там нагородят. Причем лучше бы, если бы они не выпендривались, и брали TLS в виде готового протокола. Чтобы делать не так, надо иметь ОЧЕНЬ серьезные причины.
Re: Сборка кроссплтаформенных либ под винду
От: sergey2b ЮАР  
Дата: 22.02.18 13:48
Оценка:
как собирать OpenSSL под винду можно найти в clamav проекте
он OpenSSL собирают для win версии у себя
Re: Сборка кроссплтаформенных либ под винду
От: m2l  
Дата: 22.02.18 15:36
Оценка: +1
Здравствуйте, Evgeniy Skvortsov, Вы писали:

Рыночные отношения, ты заинтересован больше авторов библиотеки в её использовании и прилагаешь больше усилий.

ES>После скачивания исходников меня настигла тоска и уныние. Поскольку сборка этого вашего хваленого опенсорса под винду — это Адъ и Израиль!

ES>И что-то я психанул, создал в MSVC пустой проект для .lib файла, закинул туда все .h и .c файл....
Вообще это самый универсальный путь. Хотя требующий умения копаться в исходниках и расставлять заглушки, которые проэмулируют posix/linux/gcc api/специфику.
Но именно с zlib тебе сильно повезло, эта одна из наименее проблемных в плане сборки под windows библиотек из всего, что я видел.

ES>В оригинале OpenSSL собирается каким-то привычным для опенсорс извратным способом.

Тут ты не прав. Есть самый простой путь — прочитать INSTALL.W64 — в кросплатформенных бибилиотеках как правило в корне лежит что-то типа INSTALL/README/BUILD где написано, что надо сделать, что бы собрать её под целевую платформу. В случае с openssl всё очень просто.

ES>Но я видел готовые сборки собранные для MSVC и имеющие привычный набор .lib для разных ключей сборки проектов /MTD /MT ... ещё чего-то там.

Если будешь следовать INSTALL.W64 именно это и получишь. Там нужно поставить только Perl. Делов минут на двадцать, с учетом компиляции.

ES>В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка...

Даже монструозный Qt требует всего-то три инсталятора: python/ruby и perl.

ES>Или это в общем случае невозможно?

Да невозможно. Компиляторы через всякие расширения предоставляют исходному коду очень ограниченную информацию о окружении в котором он собирается. В частности вообще нет никакой информации о внешних библиотеках, с которыми мы можем компилироваться. К примеру openssl может интегрироваться с библиотекой kerberos для реализации какой-то части своей функциональности. Но в языке С нет средств для условной компиляции кусков кода в зависимости от наличия у тебя этой самой библиотеки. Поэтому и требуются внешние инструменты вроде bash/perl и т.д. Они решают задачу условной компиляции, которую нельзя решить средствами языка или компилятора.

ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.

Там скрипты довольно тривиальные. А люди что непосредственно пилят эти либы уже просто привыкли.

ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.

Пример с Qt выше. Внешних зависимостей мало, просто у разных библиотек они разные.
Re: Сборка кроссплтаформенных либ под винду
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 22.02.18 16:59
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Вопрос о сборке opensorce проектов в виде библиотек под windows.

Начнём с того, что "исходники открыты, бери и исправляй))" и заканчивая "у всех, всё работает". Нужно выучить это наизусть прежде чем соваться в опенсорус.
ES>Или это норма в наше дни?
Это норма. За не норму надо также платить.
ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.
Ты как-то неверно рассуждаешь. Они для себя сделали либу в продукт и поделились им, т.е. это твоя проблема если ты не можешь это собрать. Другой вопрос, если инструмент делали для всех изначально...
ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.
Им захотелось — они сделали, твой выбор — либо взять и заточить под себя, либо написать самому то, что тебе надо, можно ещё связатсья с автором и попросить его сделать полезное дело за $$$.
Sic luceat lux!
Re: Сборка кроссплтаформенных либ под винду
От: c-smile Канада http://terrainformatica.com
Дата: 22.02.18 20:10
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>Не уверен что вопрос для данного раздела, но не смог сделать правильный выбор.


ES>Вопрос о сборке opensorce проектов в виде библиотек под windows.


И не только под Windows кстати.

На самом деле в С/С++ чертовски не хватает чего-то типа #include source "....c"

(некий файл zip-lib.c)

#include source "adler32.c"
#include source "compress.c"
...


Если бы такое было то включение библиотек можно было бы делать просто подключением одного файла в сборку:

my-project.c:

#include source "zip-lib.c";

...

int r = compress(...)



А вот кстати, есть ли какой-нибудь С/C++ компиляторов в котором можно было бы настроить такое дело?
Ну скажем с пом. каких-нибудь плагинов ?
Re[2]: Сборка кроссплтаформенных либ под винду
От: PM  
Дата: 22.02.18 22:23
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>На самом деле в С/С++ чертовски не хватает чего-то типа #include source "....c"


Есть проект single-file public domain (or MIT licensed) libraries for C/C++ https://github.com/nothings/stb

Ну и в C++ header-only библиотеки не редкость, хотя скорее вынужденая.
Re[3]: Сборка кроссплтаформенных либ под винду
От: c-smile Канада http://terrainformatica.com
Дата: 23.02.18 03:09
Оценка:
Здравствуйте, PM, Вы писали:

PM>Здравствуйте, c-smile, Вы писали:


CS>>На самом деле в С/С++ чертовски не хватает чего-то типа #include source "....c"


PM>Есть проект single-file public domain (or MIT licensed) libraries for C/C++ https://github.com/nothings/stb


Это я знаю. Паллиатив.

PM>Ну и в C++ header-only библиотеки не редкость, хотя скорее вынужденая.


Вот последнее слово не в бровь, а в глаз что называется.

Добавить #include source или #import какой в C и 90% существующих библиотек можно включать простым #include в исходниках.
И не нужен весь зверинец тех make'ов и autotools каких прости хоспидя. #if + #include и гори он все огнем.
И те самые C++ modules тоже никому будут внезапно будут не нужны.
Re: Сборка кроссплтаформенных либ под винду
От: sr_dev  
Дата: 23.02.18 14:52
Оценка:
Здравствуйте, Evgeniy Skvortsov, Вы писали:

ES>И вот сейчас, когда судьба опять подкинула сюрприз, в виде необходимости использовать опенсорсную либу, но которая без танцев с 3-мя бубнами одновременно нормально собирается только под линукс — у меня вопрос: А есть ли какая-то рабочая схема, по которой можно собрать любой кроссплатформенный опенсорс в виде нативной MSVC бибилиотеки.


В принципе в описанной ситуаций (линукс ок, винда апож) в 95% случаем помогает msys/mingw. Там собираете, получается дллка. Пути на бинарные каталоги мсиса добавляете и всё работает.
Re[2]: Сборка кроссплтаформенных либ под винду
От: Ops Россия  
Дата: 24.02.18 09:30
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Эти скрипты, их рожает специально обученная тулза.


Казалось бы, а нафига они нужны, если генерятся из других? Как временный файл — понятно, ну так его должна создавать система сборки и удалять при подчистке.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.