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

Создание приложений, библиотек, инсталляторов

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

Postby gonik on 27 May 2013, 09:05

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

Что касается 2012 - таки лучше на неё перейти, ибо 2011 глючит до безобразия (но к ошибке выше её глючность никакого отношения не имеет - там у вас в другом проблема)
В общем, не знаю, как так получилось, но приложения действительно работают по-разному на одном и том же пк.
Проблема решилась переустановкой :labview: с 2011 до 2012 и использованием папки с Вашим набором.
Еще раз большое спасибо, Андрей!
gonik
beginner
beginner
 
Posts: 48
Joined: 27 Aug 2009, 15:07
LabVIEW Version: 8.5
Karma: 0

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

Postby gonik on 27 May 2013, 09:08

gonik
Проверьте зависимости вашего экзешника с помощью или утилиты Lister в Total Commander. Она покажет список библиотек, требующихся для работы вашего приложения.
Уважаемый dadreamer, интересная программа. Но показывает неимоверное количество используемых библиотек dll. Где их искать и как привязывать к экзэшнику мне не совсем понятно.
Проблема решилась переустановкой :labview: до версии 2012 и использованием папки со сборкой Андрея (см. выше).
Спасибо всем, кто остался неравнодушным!
gonik
beginner
beginner
 
Posts: 48
Joined: 27 Aug 2009, 15:07
LabVIEW Version: 8.5
Karma: 0

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

Postby dadreamer on 27 May 2013, 18:51

Но показывает неимоверное количество используемых библиотек dll.
Так это всё библиотеки Windows, и их не так много, как вам кажется:
Без имени-2.jpg
Без имени-2.jpg (61.21 KiB) Viewed 13630 times

Однако не показывает зависимости от рантайма, также как и Lister. Значит, я ошибся, дав тот совет, по всей видимости, рантайм грузится динамически. Через Process Monitor видны LabVIEW'шные библиотеки, правда вывод инфы большой, нужно долго анализировать.
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

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

Postby AndreyDmitriev on 27 May 2013, 19:02

Однако не показывает зависимости от рантайма,
Нажмите F7

dep1.png

И почувствуйте разницу:

dep2.png
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

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

Postby Zavodila on 10 Jun 2013, 13:12

Скажите, Андрей, а для 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:
Zavodila
interested
interested
 
Posts: 9
Joined: 17 Nov 2011, 16:53
LabVIEW Version: 10
Karma: 0
hardware

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

Postby dimedrol on 02 Aug 2013, 23:14

Там дело даже не в 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, в таком случае заработало (положить просто стандартный подприбор рядом с ехе ожидаемо не прокатило)

Надеюсь, кому то поможет
dimedrol
beginner
beginner
 
Posts: 13
Joined: 02 Mar 2010, 22:31
LabVIEW Version: 8.2
Karma: 0

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

Postby AndreyDmitriev on 03 Aug 2013, 01:01

Спасибо за предложенное решение, очень вовремя нашел =)

должен отметить, что на 64-битной :labview: ничего не получилось, даже если в microsoft.VC90.CRT.manifest поменять аржитектуру на х64, сборка библиотек прямо в ехе файл тоже не помогла

На здоровье! Сами библиотеки (я о DLL) тоже, надо полагать, на 64-х битные версии заменили? И вот любопытно — что значит "сборка библиотек прямо в ехе файл"?
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

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

Postby dimedrol on 03 Aug 2013, 19:28


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

Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб. Не знаю какими уж путями разработчики обеспечили совместимость с 64, но про объемы они не парились особо видимо (хотя я, к сожалению, не знаю как обычно допиливают совместимость под 64).

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

Ну вот как-то так. Наверное, из необходимых :vi: можно сделать отдельную dll и рядом положить, но есть сомнение в таком решении...
dimedrol
beginner
beginner
 
Posts: 13
Joined: 02 Mar 2010, 22:31
LabVIEW Version: 8.2
Karma: 0

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

Postby AndreyDmitriev on 05 Aug 2013, 14:42

Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб.

Чего-то вы там напутали, коллега Димедрол.

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

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

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

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

min.png
min.png (9.68 KiB) Viewed 13441 times
Attachments
MiniApp2012x64.zip
(20.56 MiB) Downloaded 243 times
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

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

Postby dimedrol on 06 Aug 2013, 22:52

Чего-то вы там напутали, коллега Димедрол.


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

библиотеке lvanlys.dll требуется восьмая версия майкрософтовского рантайма
вот тут не понял, где его брать или кто он из вышего списка?

Попробовал Вашу сборку, на 64-системе все норм (свою прогу правда забыл потестить, завтра займусь), а на 32-разрядной ожидаемо выдало сообщение о несовместимости разрядности, так что общий вывод ИМХО: в случае создания приложения "не для себя" про 64 лучше забыть, т.к. 32-разрядная версия на любой запустится, а 64 уже нет.
(Хотя интересен вопрос о производительности в разных случаях)
dimedrol
beginner
beginner
 
Posts: 13
Joined: 02 Mar 2010, 22:31
LabVIEW Version: 8.2
Karma: 0

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

Postby AndreyDmitriev on 07 Aug 2013, 00:10

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 можно ожидать).
User avatar
AndreyDmitriev
VIP
VIP
 
Posts: 1225
Joined: 03 Feb 2010, 00:42
Location: Германия
Medals: 6
Activity (1) Professionalism (1) Tutorials (1) Gold (1) Black (2)
LabVIEW Version: 6.1 - 2016
Karma: 433

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

Postby dimedrol on 07 Aug 2013, 21:41

LV120000_BLASLAPACK.dll должна лежать там же, где и lvanlys.dll. По умолчанию LabVIEW этот файл в папку \data загоняет ...

Спасибо :super:
LV120000_BLASLAPACK.dll положил в папку \data и рантаймы из папки виндовса скопировал, и никакого колдовства больше не надо было
теперь вроде все работает ))
dimedrol
beginner
beginner
 
Posts: 13
Joined: 02 Mar 2010, 22:31
LabVIEW Version: 8.2
Karma: 0

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

Postby dadreamer on 05 Nov 2017, 23:20

Ради интереса проверил аналогичный финт на 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.

На Маке пока не пробовал, если будет время, постараюсь проверить.
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

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

Postby dadreamer on 25 Jul 2018, 16:09

Сегодня понадобилось проделать этот фокус для мелкой прожки на :labview: 2018 x64. Оказалось, что с некоторых пор NI перешли на Visual Studio 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
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

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

Postby toshas on 01 Dec 2018, 11:33

Интересно, а с NXG такое прокатывает ?
User avatar
toshas
junior
junior
 
Posts: 59
Joined: 05 Apr 2009, 22:45
LabVIEW Version: 9.0
Karma: 0

PreviousNext

Return to Создание приложений

Who is online

Users browsing this forum: No registered users and 0 guests

cron