Sziasztok!
a tárgyban említett témával kapcsolatban érdeklődnék, hogy van-e valakinek tapasztalat ilyesmiben? Egyáltalán lehetséges? És ha igen, hogyan? [visualc++-ban windows.h-ban deklarált GetProcAddress-szel megy]
- 2654 megtekintés
Hozzászólások
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ha DLL-t akarsz hívni, akkor legjobb esetben is dinamikusan be kell töltened egy futó programból.
Nemcsak binárisan nem kompatibilis, de a memóriakezelés/rendszerhívás is jócskán más egy win-re fordított dll esetében a linuxhoz képest.
Ha valahol van proxy erre, akkor az a libwine.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Kicsit homalyos a kerdes. Nem csak arra utalt, hogy a windows LoadLibrary/GetProcAddress hivasoknak mi az analog megfeleloje Linuxon?
Nos ha linuxon linuxos shared objectet akarsz dinamikusan betolteni, akkor a dlfcn.h -ban levo dlopen es dlsym a te baratod.
Ha megis linuxon akarsz windowson forditott dll-t hasznalni, akkor a winegcc lesz a te embered (talan)....
- A hozzászóláshoz be kell jelentkezni
igazad van nem fogalmaztam elég pontosan a célt: windows alatt forgatott dll-t szeretnék linuxos alkalmazásban használni. és ehhez örültem volna némi segítségnek hogyan lehet közvetlenül meghívni függyvényeket egy dll-ből. nos mint fentebb írtátok ez az út tényleg tök hülyeség...
viszont sikerült megoldást szülnöm: wineg++ segített így a szükséges függvényekkel létrehozok egy library-t, amit már vígan használhatok :)
köszönöm mindenkinek!
- A hozzászóláshoz be kell jelentkezni
Azért ennél szebb dolog lenne, ha lenne saját linux-os lib-je annak az alkalmazásnak.
- A hozzászóláshoz be kell jelentkezni
Gondolom ez a nem kivansagmusor kategoria. :)
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
pontosan... :(
de a lényeg hogy létezik megoldás :)
- A hozzászóláshoz be kell jelentkezni
újabb problémába ütköztem...
ugye sikerült leforgatnom(wineg++) egy a dll-t használó fájlt és így létrejött egy valami.o fájlom. na most ezt innentől gcc-vel szeretném tovább használni,de a gcc nyavalyog, hogy
... undefined reference to `LoadLibraryA'
...
... undefined reference to `GetProcAddress'
...
... undefined reference to `FreeLibrary'
...
szerintetek lehetséges, hogy valami winelib hozzálinkelésével ez megszűnik, vagy maradnom kell a winegcc-nél?
- A hozzászóláshoz be kell jelentkezni
LDFLAGS+=-lwine
Ha megnezed, a winegcc is egy gcc wrapper, ami kiokositja a gcc-t hogy hogyan kell windowsos stuffot forgatni.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
köszi, de sajnos még mindig nem okés...
gcc test.cpp valami.o -lwine
ugyanúgy hiányolja a fentieket.
[én lennék a béna?, hol ronthatom el?]
- A hozzászóláshoz be kell jelentkezni
Ott, hogy ezek a fuggvenyek nem a wine-ban hanem a kernel32.dll.so-ban vannak deklaralva.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
[lehet hogy nagyon láma vagyok, de...]
még mindig nem megy, szval az első próbálkozásom:
g++ MorphTools.o -L/usr/lib/wine -lkernel32
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
MorphTools.o: In function `MorphTools::init(char*, char*, int, int)':
MorphTools.cpp:(.text+0x608): undefined reference to `LoadLibraryA'
MorphTools.cpp:(.text+0x635): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x655): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x675): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x695): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x6d3): undefined reference to `FreeLibrary'
/usr/bin/ld: a.out: hidden symbol `FreeLibrary' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
és a második. [bár konkrétan libkernel32.so nem létezik de van helyette .def (gyanítom valami deklarációs féleség) és kernel32.dll.so a /usr/lib/wine-ban(ezt amúgy lehet csak úgy explicite csapni a fordításhoz?)]
g++ MorphTools.o -L/usr/lib/wine -lwine
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
MorphTools.o: In function `MorphTools::init(char*, char*, int, int)':
MorphTools.cpp:(.text+0x608): undefined reference to `LoadLibraryA'
MorphTools.cpp:(.text+0x635): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x655): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x675): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x695): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x6d3): undefined reference to `FreeLibrary'
/usr/bin/ld: a.out: hidden symbol `FreeLibrary' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
próbálkoztam még wineg++ -static... -szal de olyanja neki nincsen :(
egyre inkább azt érzem, hogy nem lehetséges amibe belevágtam...
pls hlp. :(
- A hozzászóláshoz be kell jelentkezni
-lkernel32.dll ? Esetleg nevezd at libkernel32..so-ra azt a shared objectet ha ugy jobban tetszik.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
már ezt is próbáltam többször több féleképpen, de nem megy.
biztos, hogy lehetséges?
- A hozzászóláshoz be kell jelentkezni
[..]
- A hozzászóláshoz be kell jelentkezni
g++ -o MorphTools MorphTools.o /usr/lib/wine/kernel32.dll.so
Dinamikus konyvtarat is lehet statikus modszerekkel linkelni, a gcc van olyan okos, hogy felismerje.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
az mplayer-ben van egy eleg minimalista dll loader. ha az nem eleg (mert sok mas dll-t, windoz speci fuggvenyeket hiv a betoltendo dll-ed) akkor meg marad a libwine...
A'rpi
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni