Приложение не видит dll

Создание приложений, библиотек, инсталляторов
Sergey Puzanov
beginner
beginner
Сообщения: 31
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Приложение не видит dll

Сообщение Sergey Puzanov »

Давно мучаюсь с этой проблемой, прочитал много тем здесь, но нужной не нашёл.
Имеется Windows 7 х32, LabView 2018, установленные два драйвера на модули hpe1419 и hpe1459 (пока что рассмотрим только его, для второго решение совпадёт), а также файлы типа .dll, .fp, .h, причём при установке драйверов файлы .dll кладутся в определённую папку, находящуюся в C:\Program Files\IVI Foundation\и т.д. Дальше с помощью Driver Import Wizard, используя эти самые файлы .fp, .h и .dll я создаю драйвер именно уже для самого LabView, причём .dll перенёс в папку с проектом. На этом компе не было необходимости следить, какие пути куда ведут - работает и хорошо. Вот как выглядит структура проекта:
изображение_2021-07-28_095549.png


Теперь необходимо создать .exe файл и запустить приложение на другом компе. Я добавлял в "всегда включено" эту библиотеку, закидывал сразу в корень к экзешнику, добавлял другие библиотеки, которые возможно могли быть связаны с этой, устанавливал драйверы на другой комп, но всё равно одна и та же ошибка - Missing external function *название библиотеки и виаек*. Так выглядит всё при создании:
изображение_2021-07-28_100344.png
Как правильно это сделать? Спасибо.
Artem.spb

Activity Автор
doctor
doctor
Сообщения: 2704
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 25 раз
Поблагодарили: 95 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Artem.spb »

А как выглядит вызов dll? (настройки)
Попробуйте НЕ включать их в билдер. Я никогда этого не делал, система сама знает, что ей эти файлы нужны и кладёт куда надо, и, соответственно, знает, где они лежат.
Sergey Puzanov
beginner
beginner
Сообщения: 31
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Sergey Puzanov »

Artem.spb писал(а): 28 июл 2021, 11:20 А как выглядит вызов dll? (настройки)
Например, инициализация:
изображение_2021-07-28_113152.png
Artem.spb писал(а): 28 июл 2021, 11:20 Попробуйте НЕ включать их в билдер. Я никогда этого не делал, система сама знает, что ей эти файлы нужны и кладёт куда надо, и, соответственно, знает, где они лежат.
Да, положила сама, но ошибка осталась.
DLLerror.png
DLLerror.png (8.06 КБ) 707 просмотров
ujin1
junior
junior
Сообщения: 68
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 3 раза
Поблагодарили: 10 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение ujin1 »

В ОС есть порядок опроса путей при вызове *.dll.
В типичных случаях этот файл размещается в том же каталоге, что и приложение, которое будет его использовать, и приложение загружает DLL в процессе своей инициализации. Вторым возможным местом расположения DLL является рабочий каталог, а далее ОС будет осуществлять поиск .DLL-файла в системном каталоге, каталоге Windows, а также в путях доступа, указанных в переменной окружения PATH.
В Линукс соответственно пути другие. В NI LinuxRT пути отличаются от допустим CENTOS.
Я убрал все пути из вызова dll и указание расширения, чтобы подходило и *.dll и *.so
call dll.png
Далее поместил библиотеки в C:\Program Files (x86)\National Instruments\LabVIEW 2019\resource
На том компьютере, котором исполняется программа положил библиотеки в тот же каталог что и приложение.
В линукс расположение библиотек в рабочем каталоге и подкаталоге /data так же как и символических ссылок не работает(хотя указан этот способ). Нужно размещать в каталоге библиотек В NILinuxRT это /usr/lib/
Labview при компиляции, если не включать явно, размещает .dll в подкаталоге /data рабочего каталога и в Windows это у меня везде работало. Возможно не добавлены зависимые библиотеки, хотя Вы указали что добавлены.
Кроме путей есть методы вызова и разная разрядность приложения на компьютере разработки и на компьютере исполнения.
Еще один метод создать инсталлятор приложения и включить в него инсталлятор драйверов. Так как работа идет с драйверами железа возможно требуется установить эти драйверы на целевой платформе.
Изображение
Sergey Puzanov
beginner
beginner
Сообщения: 31
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Sergey Puzanov »

Всё, теперь разобрался, спасибо. Проблема действительно состояла из нескольких частей - и путь библиотеки был указан относительно основного компа, и разрядности систем были разными, хотя сама dll одна и та же, и сам инсталятор драйвера тоже устанавливает его на обе системы.
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

Помогите разобраться с похожей проблемой:
Имеется VI в котором SubVI вызывают dll. В режиме разработки все работает отлично. Но когда запускаю exeшник - программа не может найти dll, хотя он лижит в папке data. Соответственно выкидывает окно проводника в котором остается только выбрать искомый dll и все запускается
1.jpg
. Вопрос почему она не видит dll? Пробовал перекинуть его из data рядом с VI, тогда при запуске "теряются" SubVI и надо указывать вручную в папку data, где они лежат.. В настройках все dll всегда включены в data, SubVI так же всегда включены
2.jpg
3.jpg
4.jpg
5.jpg
Sergey Puzanov
beginner
beginner
Сообщения: 31
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 11 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Sergey Puzanov »

Agat писал(а): 17 ноя 2021, 10:12 Помогите разобраться с похожей проблемой
Так вроде решение, предложенное ujin1, Вами не испытывалось - на последнем скриншоте путь к библиотеке выставить не прямой, а просто "AgInfiniiVision.dll", и при компиляции .exe файла он сам подтянет все нужные библиотеки, не нужно будет их специально добавлять.
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

Sergey Puzanov писал(а): 17 ноя 2021, 14:18 Так вроде решение, предложенное ujin1, Вами не испытывалось - на последнем скриншоте путь к библиотеке выставить не прямой, а просто "AgInfiniiVision.dll", и при компиляции .exe файла он сам подтянет все нужные библиотеки, не нужно будет их специально добавлять.
просто имя заменяется само на полный путь при сохранении.. :think:
Artem.spb

Activity Автор
doctor
doctor
Сообщения: 2704
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 25 раз
Поблагодарили: 95 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Artem.spb »

Не совсем понял настройки билда.
Попробуйте dll наоборот не включать, система сама должна разобраться, куда и что положить.
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

Artem.spb писал(а): 18 ноя 2021, 14:42 Не совсем понял настройки билда.
Попробуйте dll наоборот не включать, система сама должна разобраться, куда и что положить.
Пробовал, в этом случае он не появляется в папке data и , соответственно, при запуске ехешника также открывается проводник для ручного выбора.
ujin1
junior
junior
Сообщения: 68
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 3 раза
Поблагодарили: 10 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение ujin1 »

Agat писал(а): 17 ноя 2021, 10:12 Помогите разобраться с похожей проблемой:
Имеется VI в котором SubVI вызывают dll. В режиме разработки все работает отлично. Но когда запускаю exeшник - программа не может найти dll, хотя он лижит в папке data. Соответственно выкидывает окно проводника в котором остается только выбрать искомый dll и все запускается 1.jpg. Вопрос почему она не видит dll? Пробовал перекинуть его из data рядом с VI, тогда при запуске "теряются" SubVI и надо указывать вручную в папку data, где они лежат.. В настройках все dll всегда включены в data, SubVI так же всегда включены 2.jpg3.jpg4.jpg5.jpg
Меня смущают 2 звездочки в конце имени файла dll.
AgInfiniiVision**.dll. Звездочки в именах обычно обозначают любое количество любых символов. Так Windows не понять, что искать
AgInfiniiVision.* - Расширение звездочка в данном случае LabVIEW воспринимает либо .so либо .dll. Если не планируется использование библиотеки с этим названием на Linux и Windows лучше оставить .dll.
Изображение
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

Методом тыка удалось собрать рабочий ехешник, но не долго счастье длилось.. Следующие попытки создать ехе выдают такую ошибку
1.jpg
2.jpg
Незнаю связано ли это с тем что я наковырял, а именно - в настройках build дирректорию support объеденил с главной, dll и все subvi легли вместе с ехешником и больше при запуске программа про него не вспоминала, но в этом случае перестала видеть subvi (которые лежат в этой же папке) и тогда я сделал вот что
0.jpg
со всеми subvi, после чего ехешник собрался и запустился без проблем, но потом понадобилось собрать ехе заново и облом... выдает страшную ошибку, хотя файлы указанные в ней я не трогал..
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

ujin1 писал(а): 19 ноя 2021, 07:53
Меня смущают 2 звездочки в конце имени файла dll.
AgInfiniiVision**.dll. Звездочки в именах обычно обозначают любое количество любых символов. Так Windows не понять, что искать
AgInfiniiVision.* - Расширение звездочка в данном случае LabVIEW воспринимает либо .so либо .dll. Если не планируется использование библиотеки с этим названием на Linux и Windows лучше оставить .dll.
Это не имеет значения, т.к. и в случае AgInfiniiVision**.dll и AgInfiniiVision.dll после сохранения VI, имя автоматом меняется на полный путь.
ujin1
junior
junior
Сообщения: 68
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 3 раза
Поблагодарили: 10 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение ujin1 »

Agat писал(а): 19 ноя 2021, 08:05 Методом тыка удалось собрать рабочий ехешник, но не долго счастье длилось.. Следующие попытки создать ехе выдают такую ошибку 1.jpg2.jpg
Незнаю связано ли это с тем что я наковырял, а именно - в настройках build дирректорию support объеденил с главной, dll и все subvi легли вместе с ехешником и больше при запуске программа про него не вспоминала, но в этом случае перестала видеть subvi (которые лежат в этой же папке) и тогда я сделал вот что 0.jpg со всеми subvi, после чего ехешник собрался и запустился без проблем, но потом понадобилось собрать ехе заново и облом... выдает страшную ошибку, хотя файлы указанные в ней я не трогал..
Отключите синхронизацию с облаком, перезагрузите LabVIEW, перезагрузите компьютер. При закрытии LabVIEW выдает ошибку? Возможно какой то из SubVI не остановил работу.
Изображение
Agat
junior
junior
Сообщения: 54
Зарегистрирован: 16 янв 2019, 09:22
Версия LabVIEW: 18
Благодарил (а): 8 раз
Контактная информация:

Re: Приложение не видит dll

Сообщение Agat »

Ошибку builderа победил. Но меня очень интересует один вопрос - почему если в настройках subvi не включать ее в вызывающую vi, то после компиляции и запуска ехешника программа не может их (subvi) найти сама и выдает окно проводника? хотя все файлы были всегда включены в билд и лежат вместе с ехешником
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Создание приложений»