Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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ť.

Předmět Autor Datum
tohle na winech dávno funguje a taky se to tak řeší. aplikacím se nakecá relativní cesta- každý má s…
kmochna 10.11.2011 13:22
kmochna
Počkaj, ale toto mi pripadá ako nastavenie aplikácie pomocou tých tajných streamov, nie? Lebo napr.,…
msx. 10.11.2011 13:38
msx.
Ako je to riešené v samotnom Qt? Tam, keď sa spustí program, tak nepotrebuje knižnice vo svojom adre…
msx. 10.11.2011 18:48
msx.
co konkretne nazyvas slovom "behové knižnice"? Vseobecne je to vec programu, programator moze naprog…
MM.. 10.11.2011 18:58
MM..
Aby ti bežal program v Qt vo Windows, tak do rovnakého adresára, kde je aplikácia alebo do PATH treb…
msx. 10.11.2011 19:12
msx.
ked to neni dll ktoru volas/pouzivas ty sam (cez LoadLibrary apod), tak som ti napisal ze jako Aktu…
MM.. 10.11.2011 19:15
MM..
Predstav si túto situáciu: Program Arena (šachové GUI) spúšťa šachové motory, ktoré sú samostatnými…
msx. 10.11.2011 19:14
msx.
a tie sachove motory nemozu byt v stejnom adresari jak hlavna aplikacia? Preco nie?
MM.. 10.11.2011 19:15
MM..
Tam je to kvôli prehľadnosti v samostatnom adresári, pretože aj Arena má plno vlastných adresárov a…
msx. 10.11.2011 19:19
msx.
ved ti pisem jak to vyriesis. Pri spustani P2 mu nastavis pracovny adresar v ktorom su tie dll. Aleb…
MM.. 10.11.2011 19:22
MM..
Alebo studuj tu http://doc.qt.nokia.com/latest/deployment-windows. html moznosti je vela (od statica…
MM.. 10.11.2011 19:21
MM..
Ono v podstate stačia len tie hlavné dll, v staršom Qt Creatorovi bol aj krok pri vytváraní aplikáci…
msx. 10.11.2011 19:30
msx.
Statickým linkovaním myslíš pridanie DLL k samotnému EXE? To by bolo úplne ideálne.Hádam sa o tom v… poslední
msx. 10.11.2011 19:33
msx.

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

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

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.

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.

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í.

Zpět do poradny Odpovědět na původní otázku Nahoru