Как указать программе виндовую библиотеку?

Вопросы настройки, запуск любых Windows-программ, кроме игр

Модератор: Модераторы разделов

MiK13
Сообщения: 1219
ОС: Linux Debian

Как указать программе виндовую библиотеку?

Сообщение MiK13 »

Столкнулся с проблемой. Понадобилось сделать имитатор одного устройства, выдающего UDP пакеты.
Начальник потребовал, чтобы он работал и под виндой.
С компиляторами разобрался. Но возникли некоторые проблемы. Потребовалось управлять скоростью выдачи пакетов.
Стал использовать функции clock_gettime и nanosleep. Под Linux всё работает как и ожидается. Но при попытке запустить виндовую версию выскакивает сообщение

Shell

002b:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\run\\shm\\imit1_w64.exe") not found
002b:err:module:LdrInitializeThunk Importing dlls for L"Z:\\run\\shm\\imit1_w64.exe" failed, status c0000135
Под виндой эта программа работает, хотя и с некоторыми особенностями.
Решил проверить быстродействие (и разрешение) clock_gettime
Написал простую программу, которая выдаёт его миллион раз и вычисляет разницу между текущим и предыдущим временем. В зависимости от параметра clockid. Сначала не захотела собираться. Но собралась после добавки -lpthread
А вот запускаться не хочет:

Shell

mik13@MiK13:/run/shm$ wine ts.exe
002c:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\run\\shm\\ts.exe") not found
002c:err:module:LdrInitializeThunk Importing dlls for L"Z:\\run\\shm\\ts.exe" failed, status c0000135
mik13@MiK13:/run/shm$ ls -l `locate libwinpthread-1.dll`
-rwxr-xr-x 1 root root 303749 сен 18 2020 /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
-rwxr-xr-x 1 root root 366907 сен 18 2020 /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
То есть библиотеки эти есть. Но как их указать чтобы программа запустилась?
Spoiler
Особенности запуска в винде
Сначала начальник потребовал, чтобы на экран выводилась информация о том, что передаётся по сети.
Решил использовать Esc-поледовательности, чтобы выводить эту информацию. Под линуксом всё было нормально.
В винде (10) управление курсором работать не захотело -- всё выводится в одну строчку.
Хотя если вывод направить в файл: imit.exe >file, то type file выводится как надо.
Так же нормально (почти) выводится в случае imit.exe | cmd. "почти" -- cmd постоянно выводит в stdout, что "e не является командой" -- немного портит картинку.
Проблема решилась после установки git-bash. Из под него программа запускается и нормально работает. Почти. Проблема с функцией nanosleep.
Значение задержки я указываю через параметр (в мкс) и умножаю его на 1000.
Значение 999 действует как нулевое. Значение 1000 вызывает задержку примерно в 15 мс и так до значения 15999.
Значения 16000 и 31999 (и между ними) дают задержку в два раза больше.
Может быть под виндой надо использовать какую-то другую функцию? (usleep работает аналогично)

Ещё удивило, что программа ts.exe не захотела работать под виндой -- выскакивает сообщение, что нет библиотеки libwinpthread-1.dll.
Решил запустить под гит-башем -- запустилась. То есть он каким-то образом даёт доступ к этой библиотеке.
Но clock_gettime воспринимает не все значения параметра clockid.
Если в линуксе он принимает значения 0 ... 9 и 11, то под виндой только 0 ,,, 4. Да и разрешение, похоже, минимум 100 нс.
Спасибо сказали:
Аватара пользователя
Zer0
Сообщения: 479
ОС: Void, Slackware

Re: Как указать программе виндовую библиотеку?

Сообщение Zer0 »

В каталог с экзешником dll закидывать пробовали?
Порядок поиска DLL
Memento mori ... сделай бэкап.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2863
ОС: Gentoo

Re: Как указать программе виндовую библиотеку?

Сообщение ormorph »

У вас должна быть где то с компилятором библиотека libwinpthread-1.dll, её и надо кинуть в каталог с экзешником. Вроде ещё прописать PATH к каталогу с библиотекой тоже должно работать.
Спасибо сказали:
MiK13
Сообщения: 1219
ОС: Linux Debian

Re: Как указать программе виндовую библиотеку?

Сообщение MiK13 »

ormorph писал(а):
22.11.2022 19:41
У вас должна быть где то с компилятором библиотека libwinpthread-1.dll, её и надо кинуть в каталог с экзешником. Вроде ещё прописать PATH к каталогу с библиотекой тоже должно работать.
Спасибо. Всё получилось.
Надо будет попробовать и с виндой, может быть и там будет так работать
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2863
ОС: Gentoo

Re: Как указать программе виндовую библиотеку?

Сообщение ormorph »

Вообще я бы ещё с инструментами разработки бы поэкспериментировал.Так как есть сборки mingw которые используют статическую библиотеку libwinpthread.a, которая бы не требовалась. Ну и не знаю что за код в исходнике, но есть сборки mingw в которых не используется много-поточность posix. Обычно там требуется опция для компилятора -mthreads.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20934
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как указать программе виндовую библиотеку?

Сообщение Bizdelnick »

ormorph писал(а):
23.11.2022 14:15
есть сборки mingw которые используют статическую библиотеку libwinpthread.a
Причём тут сборка mingw? Какую компилятор попросить, ту и будет использовать. В пакете есть и та, и другая.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2863
ОС: Gentoo

Re: Как указать программе виндовую библиотеку?

Сообщение ormorph »

Bizdelnick писал:
23.11.2022 14:27
Причём тут сборка mingw?
У меня вообще отсутствует динамическая библиотека, сборки mingw разные бывают, есть те в которых вообще отсутствует возможность использования много-поточности posix. Для таких компиляторов можно использовать стороннюю сборку библиотеки, для posix ftp.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20934
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как указать программе виндовую библиотеку?

Сообщение Bizdelnick »

ormorph писал(а):
23.11.2022 14:40
сборки mingw разные бывают
Но речь-то про одну конкретную, из Debian.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1219
ОС: Linux Debian

Re: Как указать программе виндовую библиотеку?

Сообщение MiK13 »

Bizdelnick писал:
24.11.2022 01:21
ormorph писал(а):
23.11.2022 14:40
сборки mingw разные бывают
Но речь-то про одну конкретную, из Debian.
Да, у меня Debian и mingw из его репозитория меня вполне (пока) устраивает. Правда, хотелось бы иметь какие-нибудь простые средства для создания примитивных GUI-шных оболочек, через которые можно "красиво" задавать параметры, но это пока оставлю другим, хорошо владеющих Qt. Сам же займусь программами обработки данных.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2863
ОС: Gentoo

Re: Как указать программе виндовую библиотеку?

Сообщение ormorph »

MiK13 писал:
24.11.2022 03:07
Да, у меня Debian и mingw из его репозитория меня вполне (пока) устраивает.
Ну так у вас ещё вайн установлен, по этому вы можете ставить много чего. Например есть проект Chocolatey, это что то вроде менеджера пакетов для винды, подобных apt. Ставишь его и у вас уже есть нормальный powershell, с помощью команды choco можете выполнять поиск и ставить, что вам нужно. Там можно поставить вроде и mingw.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20934
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как указать программе виндовую библиотеку?

Сообщение Bizdelnick »

ormorph писал(а):
24.11.2022 04:22
Там можно поставить вроде и mingw.
Запускать виндовый mingw под wine? Экий изврат.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2863
ОС: Gentoo

Re: Как указать программе виндовую библиотеку?

Сообщение ormorph »

Bizdelnick писал:
24.11.2022 11:31
Запускать виндовый mingw под wine? Экий изврат.
Ну так не такой уж и изврат, если нужно проверять сразу бинарник на работу.
MiK13 писал:
24.11.2022 03:07
Правда, хотелось бы иметь какие-нибудь простые средства для создания примитивных GUI-шных оболочек, через которые можно "красиво" задавать параметры, но это пока оставлю другим, хорошо владеющих Qt.
Нет ни чего проще, ставить под вайном qt-5.12, там в комплекте есть qt-creator, он нормально работает под вайном. При установке сеть нужно отключать, иначе требует логин и пароль, если аккаунта нет, то вам это не надо.
Спасибо сказали: