- Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Re: Как можно использоватьMS Windows библиотеки на линуксе?
- Re: Как можно использовать MS Windows библиотеки на линуксе ?
- Новый инструмент loadlibrary позволяет портировать динамически подключаемые библиотеки Windows на Linux
- Для каких целей подходит loadlibrary?
- Как с помощью loadlibrary можно исследовать системы безопасности?
- Управление библиотеками с помощью vcpkg Manage libraries with vcpkg
- Поиск в списке доступных библиотек Search the list of available libraries
- Установка библиотеки на локальном компьютере Install a library on your local machine
- Установка библиотеки на вашем компьютере Install a library on your computer
- Установка библиотеки на компьютере Linux Install a library on your Linux machine
- Вывод списка уже установленных библиотек List the libraries already installed
- Создание файлов для Linux из Windows посредством WSL Target Linux from Windows via WSL
- Экспорт скомпилированных двоичных файлов и файлов заголовков Export compiled binaries and headers
- Обновление установленных библиотек Update/upgrade installed libraries
- Параметры обновления Upgrade Options
- Пример обновления Upgrade example
- Публикация новых библиотек Contribute new libraries
- Удаление библиотеки Remove a library
Как можно использовать MS Windows библиотеки на линуксе ?
Есть несколько библиотек (.lib) и h-файлы от виндоузной програмы, самого кода нет 🙁 Есть ли возможность использовать их под линуксом?
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Re: Как можно использовать MS Windows библиотеки на линуксе ?
я вот тоже копаю в сторону winelib но думал может кто то уже делал и есть готовый рецепт.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Подключай Winelib и просто используй LoadLibrary.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
. и не забудь, что получившейся неведомой зверюшке для жизни будет нужен wine. У тебя будет не Linux, не Windows, а Wine application.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
> .. и не забудь, что получившейся неведомой зверюшке для жизни будет нужен wine.
Чего в этом удивительного, если компилируешь с -lwine? То, что, например, если компилить с Qt, то приложение без Qt работать не будет — не удивляет? 🙂
> У тебя будет не Linux, не Windows, а Wine application.
Воспользуйся тулзой file и перестань болтать глупости.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
А LoadLibrary разве не для DLL ? К тому же хотелось бы программу написанную без виндоузных заморочек. Дело в том, что есть закрытая библиотека для VRML парсинга к ней написан открытый гуй на MFC, гуй можно легко переписать с помощью wxWidgets, а вот библиотеку хотелось бы использовать путем простой линковки.
В wine-development листе кто-то брякнул, что можно objcopy использовать или переделать в dll с помощью какой-то фигни что идет с mingw. подскажите как
Re: Как можно использовать MS Windows библиотеки на линуксе ?
> А LoadLibrary разве не для DLL
> В wine-development листе кто-то брякнул, что можно objcopy использовать
Ну ок, переколбасишь ты из одного формата в другой, а функции WinAPI то либа где будет брать? В общем крути-ни-крути, а -lwine понадобится. Ну только если она не использует вообще Win32-функции, то можно что-то типа того сделать:
objcopy $^ —prefix-symbols _ —redefine-sym _chkstk=__chkstk $@
Re: Как можно использовать MS Windows библиотеки на линуксе ?
линковать с winelib мне совсем не влом, просто не хочу windows код писать;)
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Ну, а иначе никак — либо ты пишешь линукс приложение используя библиотеку wine, либо windows-приложение компилируя с помощью mingw.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Блин, пиплы, то ли я плохо объясняю, то ли вы не слушаете. ДА, я пишу прогу под линух ДА, я хочу линковать с winelib ДА, я хочу линковать с .lib файлами НЕТ, это не DLL файлы, это .LIB (как я понимаю статические библиотеки)
Re: Как можно использоватьMS Windows библиотеки на линуксе?
> Блин, пиплы, то ли я плохо объясняю, то ли вы не слушаете. ДА, я
> пишу прогу под линух ДА, я хочу линковать с winelib
> ДА, я хочу линковать с .lib файлами
> НЕТ, это не DLL файлы, это .LIB (как я понимаю статические библиотеки)
Имхо, самый тупой вариант — все-таки помучить сначала немного винду и
обернуть этот .lib в .dll. А потом уже по рецепту, описанному
выше. Статические либы — это, по сути, просто архив объектников. А они,
AFAIR, под виндой другого формата, и gcc ты их никак не скормишь.
Re: Как можно использовать MS Windows библиотеки на линуксе ?
Категоричность оценок моих слов я оставлю на совести автора этих оценок, а по сути могу сказать следующее.
Если человек использует строковый класс из чего-нибудь типа Qt, то его не должна удивлять необходимость линковки с этой библиотекой. Однако ж, если вдруг выяснится, что для работы полученного таким способом приложения понадобятся запущенные Xы, то это с высокой вероятностью станет сюрпризом.
Для работы приложения, слинкованного с winelib, нужен запущенный wineserver, что, возможно, не совсем очевидно.
Новый инструмент loadlibrary позволяет портировать динамически подключаемые библиотеки Windows на Linux
Тэвис Орманди (Tavis Ormandy), известный эксперт Google по безопасности, выложил на GitHub инструмент loadlibrary, который позволяет нативным Linux-программам загружать и вызывать функции из динамически подключаемых библиотек Windows (DLL). В качестве демонстрации Тэвис портировал антивирус Windows Defender на Linux.
Для каких целей подходит loadlibrary?
Тэвис уточнил, что библиотека loadlibrary создана скорее для исследователей проблем безопасности, чем для всего сообщества пользователей Linux:
Этот инструмент не заменяет Wine или Winelib. Winelib используется для портирования проектов Windows C++ на Linux, а Wine — для запуска полноценных Windows-приложений. Мой инструмент позволяет загружать простые Windows DLL.
Тем не менее, loadlibrary привлекательна для разработчиков: можно загружать DLL-данные в Linux-приложения без необходимости портировать Windows-приложение целиком.
Как с помощью loadlibrary можно исследовать системы безопасности?
Библиотека позволяет использовать DLL совместно с инструментами для фаззинга. При фаззинге приложению на вход передается произвольный набор данных, а затем вывод анализируется на предмет нарушений и неисправностей. Такой метод в том числе применяется в рамках тестирования на проникновение (пентестинга).
Google за последние годы сделала два популярных фаззера: OSS-Fuzz (недавно компания провела исследование эффективности его работы) и syzkaller. Последний помог обнаружить 3 крупных бага в ядре Linux (раз, два, три), первые 2 из которых жили там на протяжении нескольких лет. Это показывает способность фаззинга выявлять уязвимости, которые легко пропустить при классическом ручном тестировании.
Используя свою библиотеку, Тэвис недавно обнаружил «crazy bad» — уязвимость в ядре Microsoft Malware Protection Engine (MsMpEng), сервиса по обеспечению безопасности, предустановленного в Windows 8, 8.1, 10 и Windows Server 2016. Вчера исследователь портировал компонент пакета MsMpEng, отвечающий за сканирование и анализ зловредов — то есть, антивирус Windows Defender.
СберЗдоровье , Удалённо , По итогам собеседования
Управление библиотеками с помощью vcpkg Manage libraries with vcpkg
После установки vcpkg его можно использовать для получения и сборки библиотек на локальном компьютере. Once you install vcpkg, you can use it to obtain and build libraries on your local machine.
Поиск в списке доступных библиотек Search the list of available libraries
Чтобы узнать, какие пакеты доступны, в командной строке введите vcpkg search . To see what packages are available, type vcpkg search at the command prompt.
Эта команда перечисляет файлы управления во вложенных папках vcpkg/ports . This command enumerates the control files in the vcpkg/ports subfolders. Вы увидите примерно такой список: You’ll see a listing like this:
Вы можете выполнить фильтрацию на основе шаблона, например vcpkg search ta : You can filter on a pattern, for example vcpkg search ta :
Установка библиотеки на локальном компьютере Install a library on your local machine
Получив название библиотеки с помощью vcpkg search , воспользуйтесь vcpkg install , чтобы загрузить библиотеку и скомпилировать ее. After you get the name of a library by using vcpkg search , you use vcpkg install to download the library and compile it. vcpkg использует файл портов (portfile) библиотеки в каталоге ports. vcpkg uses the library’s portfile in the ports directory. Если триада не указана, vcpkg установит и скомпилирует триаду по умолчанию для целевой платформы: x86-windows, x64-linux.cmake или x64-osx.cmake. If a triplet isn’t specified, vcpkg installs and compiles for the default triplet for the target platform: x86-windows, x64-linux.cmake, or x64-osx.cmake.
Для библиотек Linux vcpkg требует наличия установленного gcc на локальном компьютере. For Linux libraries, vcpkg depends on gcc being installed on the local machine. На macOS vcpkg использует Clang. On macOS, vcpkg uses Clang.
Если в portfile указаны зависимости, vcpkg скачает и установит и их. When the portfile specifies dependencies, vcpkg downloads and installs them too. После скачивания vcpkg выполнит сборку библиотеки с помощью той же системы сборки, которую использует библиотека. After downloading, vcpkg builds the library by using the same build system the library uses. Предпочтительными являются проекты CMake и MSBuild (в Windows), но поддерживается также MAKE и любые другие системы сборки. CMake and (on Windows) MSBuild projects are preferred, but MAKE is supported along with any other build system. Если диспетчеру vcpkg не удается найти указанную систему сборки на локальном компьютере, он скачивает и устанавливает ее. If vcpkg can’t find the specified build system on the local machine, it downloads and installs it.
Для проектов CMake используйте CMAKE_TOOLCHAIN_FILE , чтобы сделать библиотеки доступными через find_package() . For CMake projects, use CMAKE_TOOLCHAIN_FILE to make libraries available with find_package() . Например, в Linux или macOS: For example, on Linux or macOS:
Windows: On Windows:
Некоторые библиотеки содержат устанавливаемые параметры. Some libraries include installable options. Например, при поиске библиотеки curl вы также увидите список поддерживаемых параметров в квадратных скобках: For example, when you search for the curl library, you’ll also see a list of supported options in square brackets:
В этом случае квадратные скобки [ и ] являются литералами, а не метасимволами. In this case, the square brackets [ and ] are literals, not metacharacters.
Можно указать конкретный параметр для установки в командной строке. You can specify a specific option to install on the command line. Например, чтобы установить библиотеки для curl с использованием серверной части SSL по умолчанию для Windows, используйте команду vcpkg install curl[ssl]:x86-windows . For example, to install libraries for curl using the default SSL backend for Windows, use the vcpkg install curl[ssl]:x86-windows command. Эта команда устанавливает необходимые компоненты, включая основную библиотеку (если это необходимо): The command installs any required prerequisites, including the core library, if needed:
Чтобы узнать, какие пакеты доступны, в окне терминала перейдите в корневой каталог vcpkg и введите команду ./vcpkg search . To see what packages are available, change to the vcpkg root directory, and enter ./vcpkg search in Terminal.
Эта команда перечисляет файлы управления во вложенных папках vcpkg/ports . This command enumerates the control files in the vcpkg/ports subfolders. Вы увидите примерно такой список: You’ll see a listing like this:
Вы можете выполнить фильтрацию на основе шаблона, например vcpkg search ta : You can filter on a pattern, for example vcpkg search ta :
Установка библиотеки на вашем компьютере Install a library on your computer
Получив название библиотеки с помощью vcpkg search , воспользуйтесь vcpkg install , чтобы загрузить библиотеку и скомпилировать ее. After you get the name of a library by using vcpkg search , you use vcpkg install to download the library and compile it. vcpkg использует файл портов (portfile) библиотеки в каталоге ports. vcpkg uses the library’s portfile in the ports directory. Если триада не указана, vcpkg установит и скомпилирует триаду по умолчанию для целевой платформы: x86-windows, x64-linux.cmake или x64-osx.cmake. If a triplet isn’t specified, vcpkg installs and compiles for the default triplet for the target platform: x86-windows, x64-linux.cmake, or x64-osx.cmake.
Для библиотек Linux vcpkg требует наличия установленного gcc на локальном компьютере. For Linux libraries, vcpkg depends on gcc being installed on the local machine. На macOS vcpkg использует Clang. On macOS, vcpkg uses Clang.
Если в portfile указаны зависимости, vcpkg скачает и установит и их. When the portfile specifies dependencies, vcpkg downloads and installs them too. После скачивания vcpkg выполнит сборку библиотеки с помощью той же системы сборки, которую использует библиотека. After downloading, vcpkg builds the library by using the same build system the library uses. Предпочтительными являются проекты CMake и MSBuild (в Windows), но поддерживается также MAKE и любые другие системы сборки. CMake and (on Windows) MSBuild projects are preferred, but MAKE is supported along with any other build system. Если диспетчеру vcpkg не удается найти указанную систему сборки на локальном компьютере, он скачивает и устанавливает ее. If vcpkg can’t find the specified build system on the local machine, it downloads and installs it.
Для проектов CMake используйте CMAKE_TOOLCHAIN_FILE , чтобы сделать библиотеки доступными через find_package() . For CMake projects, use CMAKE_TOOLCHAIN_FILE to make libraries available with find_package() . Пример: For example:
Некоторые библиотеки содержат устанавливаемые параметры. Some libraries include installable options. Например, при поиске библиотеки curl вы также увидите список поддерживаемых параметров в квадратных скобках: For example, when you search for the curl library, you’ll also see a list of supported options in square brackets:
В этом случае квадратные скобки [ и ] являются литералами, а не метасимволами. In this case, the square brackets [ and ] are literals, not metacharacters.
Можно указать конкретный параметр для установки в командной строке. You can specify a specific option to install on the command line. Например, чтобы установить библиотеки для curl с использованием серверной части SSL по умолчанию, используйте команду ./vcpkg install curl[ssl] . For example, to install libraries for curl using the default SSL backend, use the ./vcpkg install curl[ssl] command. Эта команда устанавливает необходимые компоненты, включая основную библиотеку (если это необходимо). The command installs any required prerequisites, including the core library, if needed.
Чтобы узнать, какие пакеты доступны, в окне оболочки перейдите в корневой каталог vcpkg и введите команду ./vcpkg search . To see what packages are available, change to the vcpkg root directory in the shell, then enter ./vcpkg search .
Эта команда перечисляет файлы управления во вложенных папках vcpkg/ports . This command enumerates the control files in the vcpkg/ports subfolders. Вы увидите примерно такой список: You’ll see a listing like this:
Вы можете выполнить фильтрацию на основе шаблона, например ./vcpkg search ta : You can filter on a pattern, for example ./vcpkg search ta :
Установка библиотеки на компьютере Linux Install a library on your Linux machine
Получив название библиотеки с помощью ./vcpkg search , воспользуйтесь /vcpkg install , чтобы загрузить библиотеку и скомпилировать ее. After you get the name of a library by using ./vcpkg search , you use /vcpkg install to download the library and compile it. vcpkg использует файл портов библиотеки в каталоге ports . vcpkg uses the library’s portfile in the ports directory. Если триада не указана, vcpkg установит и скомпилирует триаду по умолчанию для целевой платформы, такой как x64-linux.cmake. If a triplet isn’t specified, vcpkg installs and compiles for the default triplet for the target platform, such as x64-linux.cmake.
Для библиотек Linux vcpkg требует наличия установленного gcc на локальном компьютере. For Linux libraries, vcpkg depends on gcc being installed on the local machine.
Если в portfile указаны зависимости, vcpkg скачает и установит и их. When the portfile specifies dependencies, vcpkg downloads and installs them too. После скачивания vcpkg выполнит сборку библиотеки с помощью той же системы сборки, которую использует библиотека. After downloading, vcpkg builds the library by using the same build system the library uses. Предпочтительными являются проекты CMake, но поддерживается также MAKE и любые другие системы сборки. CMake projects are preferred, but MAKE is supported along with any other build system. Если диспетчеру vcpkg не удается найти указанную систему сборки на локальном компьютере, он скачивает и устанавливает ее. If vcpkg can’t find the specified build system on the local machine, it downloads and installs it.
Для проектов CMake используйте CMAKE_TOOLCHAIN_FILE , чтобы сделать библиотеки доступными через find_package() . For CMake projects, use CMAKE_TOOLCHAIN_FILE to make libraries available with find_package() . Пример: For example:
Некоторые библиотеки содержат устанавливаемые параметры. Some libraries include installable options. Например, при поиске библиотеки curl вы также увидите список поддерживаемых параметров в квадратных скобках: For example, when you search for the curl library, you’ll also see a list of supported options in square brackets:
В этом случае квадратные скобки [ и ] являются литералами, а не метасимволами. In this case, the square brackets [ and ] are literals, not metacharacters.
Можно указать конкретный параметр для установки в командной строке. You can specify a specific option to install on the command line. Например, чтобы установить библиотеки для curl с использованием серверной части SSL по умолчанию, используйте команду ./vcpkg install curl[ssl] . For example, to install libraries for curl using the default SSL backend, use the ./vcpkg install curl[ssl] command. Эта команда устанавливает необходимые компоненты, включая основную библиотеку (если это необходимо). The command installs any required prerequisites, including the core library, if needed.
Вывод списка уже установленных библиотек List the libraries already installed
После установки некоторых библиотек вы можете воспользоваться командой vcpkg list в Windows, чтобы увидеть, что у вас есть. After you’ve installed some libraries, you can use vcpkg list command on Windows to see what you have. В Linux и macOS имеются аналогичные команды. The Linux and macOS commands are analogous.
Создание файлов для Linux из Windows посредством WSL Target Linux from Windows via WSL
Можно создавать двоичные файлы для Linux на компьютере с Windows с помощью подсистемы Windows для Linux (WSL). You can produce Linux binaries on a Windows machine by using the Windows Subsystem for Linux, or WSL. Следуйте инструкциям, по настройке WSL в Windows 10. Follow the instructions to Set up WSL on Windows 10. Затем настройте подсистему с помощью расширения Visual Studio для Linux. Then, configure it with the Visual Studio extension for Linux. Все созданные библиотеки для Windows и Linux можно разместить в одной папке. It’s okay to put all your built libraries for Windows and Linux into the same folder. Они доступны как в Windows, так и в WSL. They’re accessible from both Windows and WSL.
Экспорт скомпилированных двоичных файлов и файлов заголовков Export compiled binaries and headers
Требовать от каждого члена команды скачивать и компилировать библиотеки может быть неэффективно. It’s inefficient to make everyone on a team download and build common libraries. Эту задачу способен выполнить один человек, который может использовать команду vcpkg export , чтобы собрать двоичные файлы и заголовки или пакет NuGet в один ZIP-архив. A single team member can use the vcpkg export command to create a common zip file of the binaries and headers, or a NuGet package. Затем он может легко предоставить его другим членам команды. Then, it’s easy to share it with other team members.
Обновление установленных библиотек Update/upgrade installed libraries
Общедоступный каталог регулярно пополняется новейшими версиями библиотек. The public catalog is kept up to date with the latest versions of the libraries. Используйте vcpkg update , чтобы определить, какие из ваших локальных библиотек устарели. To determine which of your local libraries are out-of-date, use vcpkg update . Когда вы будете готовы обновить свою коллекцию портов до последней версии из общедоступного каталога, выполните команду vcpkg upgrade . When you’re ready to update your ports collection to the latest version of the public catalog, run the vcpkg upgrade command. Она автоматически скачивает и перестраивает отдельные или все установленные библиотеки, которые устарели. It automatically downloads and rebuilds any or all of your installed libraries that are out of date.
По умолчанию команда vcpkg upgrade лишь выводит список устаревших библиотек, не обновляя их. By default, the vcpkg upgrade command only lists the libraries that are out of date; it doesn’t upgrade them. Для фактического обновления библиотек используйте параметр —no-dry-run . To actually upgrade the libraries, use the —no-dry-run option.
Параметры обновления Upgrade Options
- —no-dry-run : выполнение обновления; если параметр не указан, эта команда просто выводит список устаревших пакетов. —no-dry-run Perform the upgrade; when not specified, the command only lists the out-of-date packages.
- —keep-going : продолжение установки пакетов даже при возникновении сбоя для одного из них. —keep-going Continue installing packages even if one fails.
- —triplet : задание триады по умолчанию для неквалифицированных пакетов. —triplet Set the default triplet for unqualified packages.
- —vcpkg-root
: указание каталога vcpkg для использования вместо текущего каталога или каталога средства. —vcpkg-root
Specify the vcpkg directory to use instead of current directory or tool directory.
Пример обновления Upgrade example
Следующий пример показывает, как обновить в Windows только указанные библиотеки. The following example shows how to upgrade only specified libraries on Windows. В Linux и macOS имеются аналогичные команды. The Linux and macOS commands are analogous. vcpgk автоматически получает зависимости по мере необходимости. vcpkg automatically pulls in dependencies as necessary.
Публикация новых библиотек Contribute new libraries
Вы можете включать в свою коллекцию частных портов какие угодно библиотеки. You can include any libraries you like in your private ports collection. Чтобы предложить новую библиотеку для открытого каталога, откройте обращение на странице проблем с vcpkg на сайте GitHub . To suggest a new library for the public catalog, open an issue on the GitHub vcpkg issue page.
Удаление библиотеки Remove a library
Введите vcpkg remove , чтобы удалить установленную библиотеку. Type vcpkg remove to remove an installed library. Если от нее зависят какие-то другие библиотеки, вам предлагается повторно выполнить команду с параметром —recurse , что приводит к удалению всех подчиненных библиотек. If any other libraries depend on it, you’re asked to rerun the command with —recurse , which causes all downstream libraries to be removed.