Страница 3 из 6

Re: Как создать полноценное приложение *.exe

Добавлено: 27 май 2013, 09:05
gonik
AndreyDmitriev писал(а):Так не бывает по определению. Рантайм требуется всегда, независимо от объёма приложения. Три недели назад вы запускали приложение на системе, где рантайм уже стоял. Видимо вы его снесли напрочь. Переустанавливать-то пробовали?
http://joule.ni.com/nidu/cds/view/p/id/2534/lang/en

Что касается 2012 - таки лучше на неё перейти, ибо 2011 глючит до безобразия (но к ошибке выше её глючность никакого отношения не имеет - там у вас в другом проблема)
В общем, не знаю, как так получилось, но приложения действительно работают по-разному на одном и том же пк.
Проблема решилась переустановкой :labview: с 2011 до 2012 и использованием папки с Вашим набором.
Еще раз большое спасибо, Андрей!

Re: Как создать полноценное приложение *.exe

Добавлено: 27 май 2013, 09:08
gonik
dadreamer писал(а):gonik
Проверьте зависимости вашего экзешника с помощью Dependency Walker или утилиты Lister в Total Commander. Она покажет список библиотек, требующихся для работы вашего приложения.
Уважаемый dadreamer, интересная программа. Но показывает неимоверное количество используемых библиотек dll. Где их искать и как привязывать к экзэшнику мне не совсем понятно.
Проблема решилась переустановкой :labview: до версии 2012 и использованием папки со сборкой Андрея (см. выше).
Спасибо всем, кто остался неравнодушным!

Re: Как создать полноценное приложение *.exe

Добавлено: 27 май 2013, 18:51
dadreamer
gonik писал(а):Но показывает неимоверное количество используемых библиотек dll.
Так это всё библиотеки Windows, и их не так много, как вам кажется:
Без имени-2.jpg
Без имени-2.jpg (61.21 КБ) 18847 просмотров
Однако не показывает зависимости от рантайма, также как и Lister. Значит, я ошибся, дав тот совет, по всей видимости, рантайм грузится динамически. Через Process Monitor видны LabVIEW'шные библиотеки, правда вывод инфы большой, нужно долго анализировать.

Re: Как создать полноценное приложение *.exe

Добавлено: 27 май 2013, 19:02
AndreyDmitriev
dadreamer писал(а): Однако не показывает зависимости от рантайма,
Нажмите F7
dep1.png
И почувствуйте разницу:
dep2.png

Re: Как создать полноценное приложение *.exe

Добавлено: 10 июн 2013, 13:12
Zavodila
AndreyDmitriev писал(а):
gonik писал(а): Скажите, Андрей, а для 2011 такого набора у вас нет?
Да там всё по аналогии с 2010. У вас же есть все необходимые файлы, чтобы выполнить упражнение самостоятельно - msvcp90.dll, msvcr90.dll и манифест берутся из архивов выше, а остальное из C:\Program Files (x86)\National Instruments\Shared\LabVIEW Run-Time\2011.
Получится примерно вот что:
MiniApp2011.png
Очевидно, что MSVC рантайм будет подходить и ко всем следующим версиям до тех пор, пока NI не перейдёт на следующую версию компилятора, а файлы NI LabVIEW Run-Time должны соответствовать версии LabVIEW, в котором генерялось приложение. Здесь нет обратной совместимости - для LV2011 рантайм от 2012 не подходит.
Все отлично работает XP SP3. Спасибо! :super:

Re: Как создать полноценное приложение *.exe

Добавлено: 02 авг 2013, 23:14
dimedrol
AndreyDmitriev писал(а):
AndreyDmitriev писал(а):Там дело даже не в LabVIEW, а в MSVC.
А ларчик довольно просто открывался. Надо добавить в ту же папку файлы msvcr90.dll и msvcp90.dll (требуется версия 9.0.21022.8 - можно взять из папки C:\Windows\winsxs) и приложить манифест microsoft.VC90.CRT.manifest вот с таким содержимым:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity
type="win32"
name="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
/>
<file name="msvcr90.dll" />
<file name="msvcp90.dll" />
</assembly>

Минимальный набор файлов для приложения на LV2012f1:

25.07.2012 16:30 14.001.288 lvrt.dll
25.07.2012 16:58 121.344 niCPULib.dll
25.07.2012 16:58 2.214.912 NIQtCore_2012.dll
25.07.2012 16:58 8.044.544 NIQtGui_2012.dll
25.07.2012 16:58 37.376 QtManager452_2012.dll
25.07.2012 16:58 72.323 tdtable.tdr

Для LV2010f4:

29.08.2011 15:59 14.037.088 lvrt.dll
05.04.2012 13:04 183.296 nicont.dll
29.08.2011 16:19 116.736 niCPULib.dll
29.08.2011 16:19 1.968.640 NIQtCore_2010.dll
29.08.2011 16:19 7.219.712 NIQtGui_2010.dll
29.08.2011 16:19 36.352 QtManager452_2010.dll

Плюс в папке English должны лежать lvapp.rsc и vidialogs.rsc

Если используются контролы из палитры Modern, то также требуется mesa.dll и папка models.
Понятно, что чем больше используется компонентов, тем больше файлов потребуется (ну, скажем, для математических функций lvanlys.dll, для других языков соответствующие ресурсы и т.д.). Ну и эти компоненты могут потребовать в свою очередь другие части, скажем для мат. функций может MKL потребоваться и т.д. В серьёзных проектах я бы не стал такой трюк использовать - если приложение "подхватит" вместо локальных файлов что-то из системной папки, то всё может рухнуть.

Я приложил примеры, которые проверил на практически голой WinXP SP3 (плюс я прошёлся по файлам упаковщиком - это не нарушило работоспособность) - попробуйте кому не лень на разных системах.
Спасибо за предложенное решение, очень вовремя нашел =)

должен отметить, что на 64-битной :labview: ничего не получилось, даже если в microsoft.VC90.CRT.manifest поменять аржитектуру на х64, сборка библиотек прямо в ехе файл тоже не помогла
После установки 32-битной :labview: вручную из папки, куда была установлена :labview:, вытаскивал указанные в мануале файлы, :vi: которые использовал в программе своей паковал прямо в ехе файл (linear Fit, Mean и другие стандартные подприборы).
Для того, чтобы отдельные стандартные :vi: положить в ехе файл я добавил библиотеки NI_AALbase и NI_AALpro в файл проекта и при создании самого ехешника в окне Sourse FIles вытаскивал из этих библиотек нужные подприборы в окно Always Included, в таком случае заработало (положить просто стандартный подприбор рядом с ехе ожидаемо не прокатило)

Надеюсь, кому то поможет

Re: Как создать полноценное приложение *.exe

Добавлено: 03 авг 2013, 01:01
AndreyDmitriev
dimedrol писал(а): Спасибо за предложенное решение, очень вовремя нашел =)

должен отметить, что на 64-битной :labview: ничего не получилось, даже если в microsoft.VC90.CRT.manifest поменять аржитектуру на х64, сборка библиотек прямо в ехе файл тоже не помогла
На здоровье! Сами библиотеки (я о DLL) тоже, надо полагать, на 64-х битные версии заменили? И вот любопытно — что значит "сборка библиотек прямо в ехе файл"?

Re: Как создать полноценное приложение *.exe

Добавлено: 03 авг 2013, 19:28
dimedrol
AndreyDmitriev писал(а):
На здоровье! Сами библиотеки (я о DLL) тоже, надо полагать, на 64-х битные версии заменили? И вот любопытно — что значит "сборка библиотек прямо в ехе файл"?
Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб. Не знаю какими уж путями разработчики обеспечили совместимость с 64, но про объемы они не парились особо видимо (хотя я, к сожалению, не знаю как обычно допиливают совместимость под 64).

"сборка библиотек прямо в ехе файл"- я имел ввиду, что просто положить стандартные приборы (например, Mean, Linear Fit и др.) рядом с ехе файлом естественно не вышло, всю библиотеку приборов "прикладывать" так же(да и не в dll они упакованы)... Вот и пришлось, сначала добавить нужные библитеки в файл проекта. В таком случае они будут видны в разделе Sourse Files. А вот от туда я из них включал в ехе файлик в поле Always Include нужные стандартные :vi: . Итого: рядом с ехе файлом никаких библиотек, кроме динамических, а все необходимые подприборы, как мои, так и стандартные, оказались в готовом приложении.

Ну вот как-то так. Наверное, из необходимых :vi: можно сделать отдельную dll и рядом положить, но есть сомнение в таком решении...

Re: Как создать полноценное приложение *.exe

Добавлено: 05 авг 2013, 14:42
AndreyDmitriev
dimedrol писал(а): Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб.
Чего-то вы там напутали, коллега Димедрол.

Во-первых, для того, чтобы Mean и другие мат. функции попали в исполняемый файл, никаких дополнительных телодвижений принимать не надо - они по умолчанию туда автоматом попадают, как и всё, что в разделе Dependencies. Если каждый раз при добавлении новых функций на диаграмму, добавлять их в проект - легче застрелиться. :suicide:

Во-вторых, вы не заметили того факта, что библиотеке lvanlys.dll требуется восьмая версия майкрософтовского рантайма, кроме того, не заметили, что этот файл требует себе ещё одной библиотеки из MKL.

В-третьих, в манифесте архитектура задаётся строкой amd64, а не x64, как кажется на первый взгляд.

Таким образом, минимальный набор файлов для запуска шестидесятичетырёхбитного приложения, использующего функции, требующие lvanlys.dll, выглядит как-то вот так:
min.png
min.png (9.68 КБ) 18658 просмотров

Re: Как создать полноценное приложение *.exe

Добавлено: 06 авг 2013, 22:52
dimedrol
AndreyDmitriev писал(а): Чего-то вы там напутали, коллега Димедрол.
согласен, напутал... на ПК, который использовал для тестирования, оказалось, что остался файлик из директории MKL, остался он там после того, как его туда положил инсталлятор, а после удаления не убрал ( да и остального мусора много оставил). потому и пришлось колдовать с укладкой подпрограмм внутрь ехе файлика. Ну вот требовала программа эти подприборы, пришлось как-то выходить из ситуации, на другом ПК( совсем чистом от :labview: ) естественно не запустилось, но:
если сделать вручную в нужном месте директорию с MKL папкой и файлом соответствующим, то работает
C:\Program Files (x86)\National Instruments\Shared\MKL\LV120000_BLASLAPACK
а если просто рядом с приложением положить LV120000_BLASLAPACK.dll, то запускаться не хочет ( а у Вас она в списке рядом лежит, или я не правильно что-то понял) Завтра пересоберу комплект, не все пока для меня пронятно(
AndreyDmitriev писал(а):библиотеке lvanlys.dll требуется восьмая версия майкрософтовского рантайма
вот тут не понял, где его брать или кто он из вышего списка?

Попробовал Вашу сборку, на 64-системе все норм (свою прогу правда забыл потестить, завтра займусь), а на 32-разрядной ожидаемо выдало сообщение о несовместимости разрядности, так что общий вывод ИМХО: в случае создания приложения "не для себя" про 64 лучше забыть, т.к. 32-разрядная версия на любой запустится, а 64 уже нет.
(Хотя интересен вопрос о производительности в разных случаях)

Re: Как создать полноценное приложение *.exe

Добавлено: 07 авг 2013, 00:10
AndreyDmitriev
LV120000_BLASLAPACK.dll должна лежать там же, где и lvanlys.dll. По умолчанию LabVIEW этот файл в папку \data загоняет и там же приложение его будет искать. Если хочется все файлы сложить в корневую директорию, то это дело можно в билдере поправить (destinations->support files), иначе окошко поиска библиотеки будет выскакивать

То, что программа требовала подприборы - это потому, что она не могла найти библиотеки, используемые в этих подприборах. Сами подприборы в исполняемом файле были.
Если класть файл в C:\Program Files (x86)\National Instruments\Shared\MKL\LV120000_BLASLAPACK - то сама суть идеи пропадает - тогда проще уж рантайм поставить и не заморачиваться.

рантайм VC для lvanlys.dll - это файлы msvcp80 и msvcr80 - их проще всего брать из %windir%\winsxs

64 бит приложение работать под 32 бит windows не будет. Однако 32 бит приложение будет работать в 64 бит windows в 32-х битном режиме.
Выигрыш в производительности от 64 бит приложения будет небольшой (ну процентов до 10-15 можно ожидать).

Re: Как создать полноценное приложение *.exe

Добавлено: 07 авг 2013, 21:41
dimedrol
AndreyDmitriev писал(а):LV120000_BLASLAPACK.dll должна лежать там же, где и lvanlys.dll. По умолчанию LabVIEW этот файл в папку \data загоняет ...
Спасибо :super:
LV120000_BLASLAPACK.dll положил в папку \data и рантаймы из папки виндовса скопировал, и никакого колдовства больше не надо было
теперь вроде все работает ))

Re: Как создать полноценное приложение *.exe

Добавлено: 05 ноя 2017, 23:20
dadreamer
Ради интереса проверил аналогичный финт на Linux (Ubuntu 15.04 x64, :labview: 2014 x64). Получилось ещё меньше зависимостей, чем на Windows. В моём случае потребовались вот такие папки и файлы:
English
models
liblvrt.so.14.0 (переименованный liblvrt.so.14.0.0)
libniCPULib.so (переименованный libniCPULib.so.14.0.0)
tdtable.tdr
Ожидал, что си-шный ран-тайм запросит, но почему-то не стал. Возможно, на чистой ОСи всё-таки понадобится.

upd: нет, не просит, проверил на чистой Убунте 15.04.

На Маке пока не пробовал, если будет время, постараюсь проверить.

Re: Как создать полноценное приложение *.exe

Добавлено: 25 июл 2018, 16:09
dadreamer
Сегодня понадобилось проделать этот фокус для мелкой прожки на :labview: 2018 x64. Оказалось, что с некоторых пор NI перешли на Visual Studio 2015, в котором ввели такую штуку как универсальный CRT. Поэтому для запуска и дальнейшей работы экзешника требуется либо поставить Распространяемый компонент Microsoft Visual C++ 2015 (Redistributable), либо положить рядом с .exe вот такой вот минимальный ран-тайм комплект:
api_ms_win_core_console_l1_1_0.dll
api_ms_win_core_datetime_l1_1_0.dll
api_ms_win_core_debug_l1_1_0.dll
api_ms_win_core_errorhandling_l1_1_0.dll
api_ms_win_core_file_l1_1_0.dll
api_ms_win_core_file_l1_2_0.dll
api_ms_win_core_file_l2_1_0.dll
api_ms_win_core_handle_l1_1_0.dll
api_ms_win_core_heap_l1_1_0.dll
api_ms_win_core_interlocked_l1_1_0.dll
api_ms_win_core_libraryloader_l1_1_0.dll
api_ms_win_core_localization_l1_2_0.dll
api_ms_win_core_memory_l1_1_0.dll
api_ms_win_core_namedpipe_l1_1_0.dll
api_ms_win_core_processenvironment_l1_1_0.dll
api_ms_win_core_processthreads_l1_1_0.dll
api_ms_win_core_processthreads_l1_1_1.dll
api_ms_win_core_profile_l1_1_0.dll
api_ms_win_core_rtlsupport_l1_1_0.dll
api_ms_win_core_string_l1_1_0.dll
api_ms_win_core_synch_l1_1_0.dll
api_ms_win_core_synch_l1_2_0.dll
api_ms_win_core_sysinfo_l1_1_0.dll
api_ms_win_core_timezone_l1_1_0.dll
api_ms_win_core_util_l1_1_0.dll
api_ms_win_crt_conio_l1_1_0.dll
api_ms_win_crt_convert_l1_1_0.dll
api_ms_win_crt_environment_l1_1_0.dll
api_ms_win_crt_filesystem_l1_1_0.dll
api_ms_win_crt_heap_l1_1_0.dll
api_ms_win_crt_locale_l1_1_0.dll
api_ms_win_crt_math_l1_1_0.dll
api_ms_win_crt_multibyte_l1_1_0.dll
api_ms_win_crt_private_l1_1_0.dll
api_ms_win_crt_process_l1_1_0.dll
api_ms_win_crt_runtime_l1_1_0.dll
api_ms_win_crt_stdio_l1_1_0.dll
api_ms_win_crt_string_l1_1_0.dll
api_ms_win_crt_time_l1_1_0.dll
api_ms_win_crt_utility_l1_1_0.dll
concrt140.dll
msvcp140.dll
ucrtbase.dll
vcamp140.dll
vccorlib140.dll
vcomp140.dll
vcruntime140.dll

:D
Все эти файлы можно достать с компа, на котором Redist уже установлен - инструкция. Манифесты никакие больше не надо прикладывать.
Ну, и плюс папки/файлы от NI в таком составе:
English
errors (чтоб Error Handler показывал окно LV с описанием ошибки, а не undefined-заглушку)
models
[программа].exe
lvrt.dll
mesa.dll
nicont.dll
niCPULib.dll
nierInterface.dll
NILVRuntimeManager.dll (для отображения диалогов об отсутствующих либах при запуске; хотя запускается и без этого файла)
NIQtCore_2018.dll
NIQtGui_2018.dll
QtManager452_2018.dll
tdtable.tdr

Re: Как создать полноценное приложение *.exe

Добавлено: 01 дек 2018, 11:33
toshas
Интересно, а с NXG такое прокатывает ?