- gban: Ingyen kellene, de tegnapra
- Meggyi001: Egy olcsó vállfás megoldás a pólóimnak...
- Android másképp: Lineage OS és társai
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- ricshard444: Fényképező ? Telefon helyett
- eBay-es kütyük kis pénzért
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Yutani: Yutani Retró Hangkártyái: OAK Mozart Wavetable
- VoidXs: Tényleg minden játék optimalizálatlan?
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
jattila48 #4467 üzenetére
Azt hiszem, sikerült kisilabizálni a választ. Függvény nevek esetén a név dekoráció (vagy manglálás) azért kell, hogy a linker meg tudja különböztetni az overload-olt fv. neveket. Ez világos (és eddig is az volt). Függvény pointer nevek azonban nem overload-olhatók, ezért ott nincs szükség név dekorációra, így az extern "C" deklarációnak (ami elnyomja a C++ név dekorációt) sincs értelme. Gondoltam én. Csakhogy fv. pointer nevek esetén a dekorációt nem az overload-olás miatt használják, hanem a hívási konvenció miatt. A különböző TU-kban deklarált és definiált ugyanolyan nevű fv. pointereknek meg kell egyezni a hívási konvencióban. Eddig azt gondoltam, hogy nincs külön C és C++ hívási konvenció (mint ahogy MS fordítóknál nincs is), de elképzelhető, hogy más fordítóknál ez másképp van. Legalábbis a lehetőségét fenntartják.
érdekes olvasmány: [link]
Idézet a cppreference.com -ról:
"Since language linkage is part of every function type, pointers to functions maintain language linkage as well. Language linkage of function types (which represents calling convention) and language linkage of function names (which represents name mangling) are independent of each other"
Tehát a fv. típus és fv. név language linkage-e (mint pl. az extern "C") két különböző, és független dolog. Eszerint fv. pointer esetén a language linkage a pointer által mutatott fv. típusára utal (hívási konvenció), nem pedig a fv. pointer névre.
Elnézést a hosszú hozzászólásért, remélem azért érthető volt min problémáztam.
-
coco2
őstag
válasz
jattila48 #4467 üzenetére
A lentiek akkor tudnak neked magyarázatul szolgálni, ha legacy problémákba ütköztél bele.
A C és a C++ linkelések eltérőek. A legacy környezetekkel kompatibilis linkelés kötelezően támogatott mindegyik fordító által, de külön jelezned kell, ha azt kívánod használni.
A C++ linkelés néhány verziónként eltér, és nem lehet azok között átugrálni. Egy nagyon régi projekthez előrefordított C++ dll-t nem tudsz új projektekben betölteni. Próbáld ki, és meglátod. Forráskódot kell újrafordítani jelenkori verzió alatt. Ha azt meg tudod tenni, akkor értelmetlen a vacakolás - ahogy írtad. De ha csak bináris formában van rádhagyva egy régi C++ dll, és nincsen lehetőséged újrafordításra, akkor bizony workaround kell. Egyik lehetőségként visszatérhetsz régebbi C++ fordítóra, és használhatod a teljes projekthez. Feltéve, hogy a toolchain-ed nem kényszerít rád újabb verziót. Ha abba ütköztél bele, akkor rámicsodáltál. Egy régebbi C++ dll binárisa lehetségesen kuka. Egy C dll örökéletű. A C idejében még nem volt verziók közötti kompatibilitási gond, és a mai napig nincsen.
Ami probléma egy előrefordított C dll-el lenni tud, az a target cpu. Legacy C dll-ek várhatóan x86. De azóta már előfordul armv7 és x64 is. Eltérő platformokon nem tudsz keresztül linkelni.
-
cog777
őstag
válasz
jattila48 #4467 üzenetére
Azt hittem azt kerdezed hogy csak a declaraciora vonatkozik az extern "c" vagy az implementaciora is.
A fenti peldaban mindkettot ajanljak, ha tobbfele forditot hasznalsz.Ha a valtozora kerdezel ra, akkor igen lehet hasznalni arra is, ugyanabbol a celbol.
Language linkage - cppreference.com
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Milyen videókártyát?
- PlayStation 5
- Eurós árlista a Google Pixel 10 telefonokhoz
- iRacing.com - a legélethűbb -online- autós szimulátor bajnokság
- World of Tanks - MMO
- gban: Ingyen kellene, de tegnapra
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Elektromos autók - motorok
- TCL LCD és LED TV-k
- Meggyi001: Egy olcsó vállfás megoldás a pólóimnak...
- További aktív témák...
- Bomba ár! Dell Latitude E6530 - i5-3GEN I 4GB I 500GB I HDMI I 15,6" HD+ I W10 I Garancia!
- Asus ROG G20AJ - Intel Core i7-4790, GTX 980
- Telefon felvásárlás!! Samsung Galaxy S24/Samsung Galaxy S24+/Samsung Galaxy S24 Ultra
- LG 48C3 - 48" OLED evo - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - A9 Gen6 CPU
- MacBook, Apple M1 / M2 kompatibilis dokkolók, DisplayLink 4K, USB-C, Type-C
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest