Не уверен что вопрос для данного раздела, но не смог сделать правильный выбор.
Вопрос о сборке opensorce проектов в виде библиотек под windows.
Вкратце мой однажды внезапно успешный опыт. Как-то давно, делал я ради фана приложение работающее с файлами некой игры.
По мере развития оказалось, что часть данных этой игры может быть пожата zip`ом.
Пришлось подключать библиотеку zlib (если не ошибаюсь) для корректной поддержки такого вида данных.
После скачивания исходников меня настигла тоска и уныние. Поскольку сборка этого вашего хваленого опенсорса под винду — это Адъ и Израиль!
И что-то я психанул, создал в MSVC пустой проект для .lib файла, закинул туда все .h и .c файлы из исходников zlib. Подробностей уже не помню, но без всякого гемора MSVC собрал рабочую библиотеку, которую я успешно дальше использовал в своей программке для распаковки пожатых данных.
И вот сейчас, когда судьба опять подкинула сюрприз, в виде необходимости использовать опенсорсную либу, но которая без танцев с 3-мя бубнами одновременно нормально собирается только под линукс — у меня вопрос: А есть ли какая-то рабочая схема, по которой можно собрать любой кроссплатформенный опенсорс в виде нативной MSVC бибилиотеки.
В оригинале OpenSSL собирается каким-то привычным для опенсорс извратным способом.
Но я видел готовые сборки собранные для MSVC и имеющие привычный набор .lib для разных ключей сборки проектов /MTD /MT ... ещё чего-то там.
В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка...
Или это в общем случае невозможно?
Просто я в последний раз видел такую систему сборки, которая после скачивания репозитария с гитхаба — некомпилябельна вообще. Исходники сперва нужно причесать километровыми скриптами, под определенную платформу, которые создадут ещё кучу файлов .h и .c, и только после этого можно запускать сборку проекта.
Я конечно далек от мира промышленного ПО, но на мой взгляд это какой-то ужас!
Или это норма в наше дни?
Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.
Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.
Здравствуйте, 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 стал таким популярным.
Здравствуйте, reversecode, Вы писали:
R>я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ? R>- ну как же?! создаем зашифрованный канал связи! R>после этой фразы я куею, и отвечаю что для этого достаточно простенького DH/RSA/AES256
И правильно делают, что берут. Еще не хватало, чтобы они делали самодельные криптопротоколы на базе перечисленных тобой кирпичиков. Я представляю себе, чего они там нагородят. Причем лучше бы, если бы они не выпендривались, и брали TLS в виде готового протокола. Чтобы делать не так, надо иметь ОЧЕНЬ серьезные причины.
Рыночные отношения, ты заинтересован больше авторов библиотеки в её использовании и прилагаешь больше усилий.
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 выше. Внешних зависимостей мало, просто у разных библиотек они разные.
ES>В общем хочется собирать библиотеки просто с помощью MSVC, без кучи всякого хлама навроде ActivePerl, MinGW, tclshl, bash скриптов и прочего зоопарка... ES>Или это в общем случае невозможно?
в базовой версии openssl невозможно
в базовой нету того виндовс программиста который бы занимался такой поддержкой
ES>Или это норма в наше дни?
норма
мало проэтов которые поддерживаются и виндовс программистами
и еще меньше которые бы под винду писали опенсорс
опенсорс пришел из мира юникс — отсюда и все неудобности в либах итд
ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.
руками
ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.
с миру по нитке, каждый по чуть чуть и получается огогоо
ps зачем брать openssl ? возьмите любую другую либу
я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ?
— ну как же?! создаем зашифрованный канал связи!
после этой фразы я куею, и отвечаю что для этого достаточно простенького DH/RSA/AES256
я бы еще понял если это использовалось для https как сервер или клиент для совместимости
но для своих каналов связи городить такие трехматовые конструкции на openssl это пять
Здравствуйте, reversecode, Вы писали:
R>в базовой нету того виндовс программиста который бы занимался такой поддержкой
Ну как нет? Я же скачивал уже собранный OpenSSL под винду с либами под MSVC
И даже рецепт есть сборки моей требуемой либы через MSVC, но он не сработал, то ли старый слишком, то ли ещё что.
Я фиксил ошибки сборки пока ума хватило, потом зашел в тупик, просто не знаю, что с теми ошибками делать дальше.
R>я вообще удивляюсь когда спрашиваешь у народа — а зачем вы этот openssl тяните себе в проект ?
Да это не я тяну, это либа которую я собираю хочет OpenSSL.
Здравствуйте, reversecode, Вы писали:
R>а поддерживают они mingw R>потому у них все собирается
Да даже с MinGW проблемы — с неправильными ключами не собирается. Какие правильные — ХЗ. Мануалов в инете не мало, у всех разные ключи, пока все перепробуешь — охренеешь.
И каждый утверждает, что его вариант верный. Может он и верный был пару лет назад. Актуальной информации 0.
Разработчики вообще игнорируют сборку. И это понятно, правильную сборку они продают за огромные бабки. А тебе достается куча .h и .c файлов. И делай с ним всё что хочешь.
Это не проблема с миру по нитке, это целенаправленная политика.
Что бы не быть голословным — Sqlcipher. Я хоть её и собрал, но нормально она так и не заработала.
На сайт производителей написано — хотите собранные либы под все платформы, оттестированные, с поддержкой и прочими ништяками — давайте кучу бабла.
Нет — вон там исходники, трахайтесь с ними как хотите.
Какой-то чувак из рунета предлагал свои наработки в открытом доступе для сборки этой либы под MSVC, но то ли инфа неактуальная, то ли всё это брехня — не собирается. Валится куча ошибок, часть удалось устранить, остальные — не знаю что с этим делать.
R>ну тогда надо с ошибками где на чем не собирается приходить на форум R> а то конструктива не будет
В таких вопросах не будет конструктива, если только это не супер популярная бибилиотека.
Здравствуйте, reversecode, Вы писали:
R>это все эмоции
Тут ты прав.
R>выхлоп лога в чем там не собирается, будет ?
Да собрал я уже, два дня прошло.
R>в мингв оно всегда должно собраться, так как мингв тот же гцц R>главное брать правильную версию и его сопутствующие утилиты
Здравствуйте, Zhendos, Вы писали:
Z>Если имеется ввиду configure и Makefile, то эти файлы генерируются из совсем небольших файлов. Z>А так да, после того как эти скрипты сгенерированы из configure.in/configure.ac и Makefile.am
Ну да, на моем небольшом опыте, даже эти configure тормозятся из-за фатал ерор.
Что бы не быть голословным, тот же sqlcipher не собирается, пока ему не задать опцию -disable_tcl
Пишу по памяти, но смысл в том, что по умолчанию сборка обрабатывается какими-то tcl скриптами. И на этих скриптах возникает ошибка. Что она означает я ХЗ.
Там ошибка типа "TK_FLOAT — значение не найдено". Где не найдено? в каком месте не найдено? в какой программе не найдено? На каком языке это всё написано?
Там скрипт размером примерно 65 Кб. И неизвестно что он ещё вызывает для своей работы. Попробуй найди в нем, где там что не найдено.
Z>архив с исходным кодом получается довольном большим, это одна из причин почему cmake стал таким популярным.
Здравствуйте, 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 не работает?
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.
Эти скрипты, их рожает специально обученная тулза.
Просто в юнихе все, что нужно этой тулзе и рожденной ей скриптам либо есть в системе из коробки, либо ставится легко и без усилий. А в венде, наоборот, всего этого обычно нет, и поставить непросто.
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Вопрос о сборке opensorce проектов в виде библиотек под windows.
Начнём с того, что "исходники открыты, бери и исправляй))" и заканчивая "у всех, всё работает". Нужно выучить это наизусть прежде чем соваться в опенсорус. ES>Или это норма в наше дни?
Это норма. За не норму надо также платить. ES>Я вообще поражаюсь, а как они это пишут? Скрипты для преобразования исходников в компилябельную версию по объему больше чем исходники самого проекта.
Ты как-то неверно рассуждаешь. Они для себя сделали либу в продукт и поделились им, т.е. это твоя проблема если ты не можешь это собрать. Другой вопрос, если инструмент делали для всех изначально... ES>Там две команды сидит? Или там вундеркинды которые могут всё? На всех языках мира? и по ходу дела, в качестве хобби, каждый из них по субботам пишет свою систему сборки и свой скриптовый язык.
Им захотелось — они сделали, твой выбор — либо взять и заточить под себя, либо написать самому то, что тебе надо, можно ещё связатсья с автором и попросить его сделать полезное дело за $$$.
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>Не уверен что вопрос для данного раздела, но не смог сделать правильный выбор.
ES>Вопрос о сборке opensorce проектов в виде библиотек под windows.
И не только под Windows кстати.
На самом деле в С/С++ чертовски не хватает чего-то типа #include source "....c"
Здравствуйте, 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 тоже никому будут внезапно будут не нужны.
Здравствуйте, Evgeniy Skvortsov, Вы писали:
ES>И вот сейчас, когда судьба опять подкинула сюрприз, в виде необходимости использовать опенсорсную либу, но которая без танцев с 3-мя бубнами одновременно нормально собирается только под линукс — у меня вопрос: А есть ли какая-то рабочая схема, по которой можно собрать любой кроссплатформенный опенсорс в виде нативной MSVC бибилиотеки.
В принципе в описанной ситуаций (линукс ок, винда апож) в 95% случаем помогает msys/mingw. Там собираете, получается дллка. Пути на бинарные каталоги мсиса добавляете и всё работает.
опа опа мы воюем с нато
любит хавать этот кал
путинская вата
Здравствуйте, Pzz, Вы писали:
Pzz>Эти скрипты, их рожает специально обученная тулза.
Казалось бы, а нафига они нужны, если генерятся из других? Как временный файл — понятно, ну так его должна создавать система сборки и удалять при подчистке.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Pzz>>Эти скрипты, их рожает специально обученная тулза.
Ops>Казалось бы, а нафига они нужны, если генерятся из других? Как временный файл — понятно, ну так его должна создавать система сборки и удалять при подчистке.
По традиции, исключительно для удобства (юниксовского) пользователя, чтобы не заставлять его у себя еще и autoconf/automake держать. А так, да, удалаются при подчистке. При более глубокой подчистке, чем make clean (забыл, как правильный таржет называется).
Но вообще, все это — довольно архаичная система, и по нонешним временам работает не очень хорошо. Переделал-бы кто-нибудь, да, похоже, некому...
Здравствуйте, Pzz, Вы писали:
Pzz>И правильно делают, что берут. Еще не хватало, чтобы они делали самодельные криптопротоколы на базе перечисленных тобой кирпичиков. Я представляю себе, чего они там нагородят. Причем лучше бы, если бы они не выпендривались, и брали TLS в виде готового протокола. Чтобы делать не так, надо иметь ОЧЕНЬ серьезные причины.
Хотел бы спросить: сравнивал ли ты интерфейс для асинхронных сокетов openssl с другими ssl-сокетами(Android, iOS)? Я молчу даже про bio, но зачем в OpenSSL нужны SSL_ERROR_WANT_READ и SSL_ERROR_WANT_WRITE?
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, lpd, Вы писали:
lpd>Хотел бы спросить: сравнивал ли ты интерфейс для асинхронных сокетов openssl с другими ssl-сокетами(Android, iOS)? Я молчу даже про bio, но зачем в OpenSSL нужны SSL_ERROR_WANT_READ и SSL_ERROR_WANT_WRITE?
А какой смысл в этом сравнении? Вендовый CryptoAPI заведомо еще хуже
Однако, я не сказал, что надо использовать именно OpenSSL, есть и другие библиотеки на эту тему. Я сказал, что не надо самодельных криптопротоколов изобретать без нужды.
Здравствуйте, Pzz, Вы писали:
Pzz>По традиции, исключительно для удобства (юниксовского) пользователя, чтобы не заставлять его у себя еще и autoconf/automake держать. А так, да, удалаются при подчистке. При более глубокой подчистке, чем make clean (забыл, как правильный таржет называется).
distclean
Pzz>Но вообще, все это — довольно архаичная система, и по нонешним временам работает не очень хорошо.
времена просто изменились...
Pzz> Переделал-бы кто-нибудь, да, похоже, некому...
Для сборки OpenSSL нужно иметь Visual Studio и ActivePerl для Windows.
Процесс сборки по шагам OpenSSL:
1) скачиваем по ссылке https://www.openssl.org/source/openssl-1.0.2o.tar.gz и распаковываем.
2) запускаем утилиту из Visual Studio для сборки из командной строки (например для VS 2017 Community "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"). Утилиту можно также найти через кнопку "Start" в списке программ. Появляется окно командной строки.
3) переходим в корневой каталог с распакованными исходниками openssl.
4) выполняем команды: >> c:\Perl\bin\perl Configure VC-WIN32 no-asm >> call ms\do_ms.bat >> nmake -f ms\ntdll.mak
5) получаем либы, которые можно подключать к своему проекту: ssleay32.dll, ssleay32.lib, ssleay32.exp, libeay32.dll, libeay32.lib, libeay32.exp. Либы можно скопировать в отдельную папку ( для удобства) c:\openssl\libs, также как хедеры в папку c:\openssl\include.
Сборка zlib по шагам:
1) скачиваем по ссылке https://github.com/madler/zlib/archive/v1.2.11.zip, распаковываем.
2) запускаем утилиту из Visual Studio для сборки из командной строки.
3) переходим в корневой каталог с распакованными исходниками и выполняем: >> nmake -f win32/Makefile.msc
4) копируем хедеры: zconf.h и zlib.h, например в c:\zlib\include.
5) копируем либы: zdll.exp, zdll.lib, zlib1.dll, например в c:\zlib\lib.
6) подключаем хедеры и либы к своему проекту.
Здравствуйте, уважаемые участники форума ( http://rsdn.org/Forum/ ). Очень прошу, если у кого сохранились — кто-нибудь, пожалуйста, выложите на Вашем сервере (или где-нибудь на свободном файлообменнике) следующие очень старые SDK от Microsoft (и дайте ссылки на них), в Итернете ИХ (#1, #2, #3, #4) НИГДЕ НЕВОЗМОЖНО НАЙТИ(!!!) (все ссылки или битые-мертвые или ложные
Может быть у кого-нибудь остались Platform Software Development Kit-ы 1998--1999 годов (выпущенные ДО ИЮНЯ 2001 года)?
НУЖНЫ ИМЕННО ВСЕ ЭТИ СТАРЫЕ SDK:
----------------------------------------
#1) Microsoft Win32 Software Development Kit 4.0 (v4.0)
----------------------------------------
#2) Microsoft Platform SDK April 1999 (1999-04)
----------------------------------------
#3) Microsoft Platform SDK September 1999 (1999-09) (!!!)
----------------------------------------
#4) Microsoft Platform SDK February 2001 (2001-02)
----------------------------------------
ОСОБЕННО ОЧЕНЬ НУЖЕН: Microsoft Platform SDK September 1999 (1999-09) (версия SDK за СЕНТЯБРЬ 1999 ГОДА!)
Здравствуйте, reversecode, Вы писали:
R>флудер R>https://forum.shelek.ru/index.php/topic,7567.msg304378/topicseen.html
Зачем обзываться? Microsoft Platform SDK September 1999 и др. SDK мне надо для драйверов под Windows 98 (Visual C++ 5).
Если у кого-то есть — поделитесь, пожалуйста.