Qt Windows - behové knižnice z iného adresára
Zaradil som do kategórie softvér, hoci by sa to dalo obhájiť aj v kategórii programovanie. Možno by nebolo od veci dať možnosť multivýberu kategórii. Ale k veci:
Povedzme, že mám program v Qt (P1) a ten bude volať iný program v Qt v inom adresári (svoj "plugin", P2). P1 bude mať v adresári s EXE súborom aj všetky potrebné knižnice Qt potrebné pre jeho beh. P2 by ich mal mať tiež a takto narastie dĺžka programu zbytočne o myslím 20 MB. Dá sa nejako dosiahnuť, aby P2, ktorý je volaný z P1 využíval knižnice z adresára P1? Zamedzilo by sa tým duplikovaniu súborov.
Pýtam sa to v teoretickej rovine a uvítam aj nejaký "kód", ktorý by to umožnil. Reálne taký program napísaný nemám, ale v budúcnosti budem mať a preto sa pýtam dopredu ako to riešiť.
tohle na winech dávno funguje a taky se to tak řeší. aplikacím se nakecá relativní cesta- každý má svoje knihovny a fyzicky jsou pouze jednou.
Počkaj, ale toto mi pripadá ako nastavenie aplikácie pomocou tých tajných streamov, nie? Lebo napr., informácia, že súbor bol stiahnutý z Internetu a že je nebezpečný pre spustenie sa ukladá práve do tých tajných streamov. Čo ak umiestnim aplikáciu na web a stiahne si ju niekto? Pôjde to aj potom bez toho, aby to on nastavoval ručne?
Doplnené: Dokonca pozerám, že nejaké záložky mi chýbajú, mám len 4 (XP), ty 6. Tiež som otvoril explorer.exe
Ako je to riešené v samotnom Qt? Tam, keď sa spustí program, tak nepotrebuje knižnice vo svojom adresári.
co konkretne nazyvas slovom "behové knižnice"?
Vseobecne je to vec programu, programator moze naprogramovat cokolvek, ak cita nejaku dll tak zadava nazov a moze zadat kludne aj ..\..\atd). Ked to nemas vo svojom programe ale skryte vo frameworku tak hlada sa najprv v aktualnom, potom v systemovych adresaroch. Aktualny adresar aplikacie sa da nastavit, mal by si si pozret tu funkciu ktorou spustas to P2, urcite sa tam bude dat nastavit aj pracovny adresar pre P2 priamo pri jej spustani.
Aby ti bežal program v Qt vo Windows, tak do rovnakého adresára, kde je aplikácia alebo do PATH treba dať súbory qt4core.dll, qt4....dll atď. Minimum sú myslím 2, ak sa používa databáza, tak pribudne tretí a tak. Problém je, že programátor nevie ovplyvniť chovanie programu, lebo bez tých knižníc sa programátorom naprogramovaný kód nespustí. Dokázala by to ovplyvniť len aplikácia, ktorá tú druhú spúšťa a to sa pýtam, že ako.
ked to neni dll ktoru volas/pouzivas ty sam (cez LoadLibrary apod), tak som ti napisal ze jako
Predstav si túto situáciu:
Program Arena (šachové GUI) spúšťa šachové motory, ktoré sú samostatnými aplikáciami. Asi tomuto sa to dá najlepšie pripodobniť.
a tie sachove motory nemozu byt v stejnom adresari jak hlavna aplikacia? Preco nie?
Tam je to kvôli prehľadnosti v samostatnom adresári, pretože aj Arena má plno vlastných adresárov a tak isto by som to aj ja potreboval mať pekne zvlášť.
To čo píšeš v poslednej vete vyššie o pracovnom adresári je dosť možné. Takže takto by to šlo obísť zrejme. Možno si skúsim niečo také na skúšku naprogramovať a uvidím ako sa to bude chovať.
Ale ideálne by bolo spraviť to tak ako je to vyriešené v linkeri Qt v IDE Qt Creator. Asi by som sa to mal skúsiť opýtať na fóre Qt.
ved ti pisem jak to vyriesis. Pri spustani P2 mu nastavis pracovny adresar v ktorom su tie dll. Alebo linkuj staticky, viz nizsie. Ja osobne linkujem vzdy staticky (nie QT ale klasicke C++) ptz dll je len dementizmus od MS bez zmyslu.
Alebo studuj tu
http://doc.qt.nokia.com/latest/deployment-windows. html
moznosti je vela (od statically linked az po nejake fcie na nastavenie ciest).
BTW. testuj to na cistom PC, aby si vedel ze co vsetko este musis distribuovat ked to nelinkujes staticky, ono je mozne ze to chce aj nejake systemove dll ktore boli u teba uz instalovane do systemu (C:\Windows\neco\) spolu s instalaciou QT.
Ono v podstate stačia len tie hlavné dll, v staršom Qt Creatorovi bol aj krok pri vytváraní aplikácie, kde sa fajkovalo, čo sa má použiť. Teraz je to tam nejako inak, ale tých dll je spolu tuším 8 a je to ľahké zistiť, čo treba, lebo bez nich sa to ani nespustí. Iné to nevyžaduje nič. Dokonca sa mi páči, že inštalácia Qt Creatora so všetkým, čo k nemu treba je prenositeľné. Akurát v nastaveniach treba potom nastaviť cestu ku kompilátoru a ide to.
Statickým linkovaním myslíš pridanie DLL k samotnému EXE? To by bolo úplne ideálne.Hádam sa o tom v tom linku dočítam. Lebo raz dávnejšie som niečo také hľadal a našiel som len informácie o tom, že ktoré DLL treba pridať k programu.
Doplnené: Takže je to vytvorenie DLL súborov bez čísla verzie, ale nejaký extra význam v tom nevidím, pretože, keby sa objavila staršia aplikácia, bude fungovať s tým "univerzálnym" DLL, keď je to verzia 4? To som tam zodpovedané nenašiel, ale nevadí.