Ú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!
- Víz- gáz- és fűtésszerelés
- Mibe tegyem a megtakarításaimat?
- iPhone topik
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- BestBuy ruhás topik
- Xbox Series X|S
- Linux kezdőknek
- Fejhallgató erősítő és DAC topik
- Samsung Galaxy Watch4 és Watch4 Classic - próbawearzió
- Gitáros topic
- További aktív témák...
- BONTATLAN Új iPhone 17 PRO Kozmosznarancs 256-512GGB Független 1év Apple Gar. Azonnal átvehető.Deák
- i5930, MSI X99, EVGA RTX 2080 Super Hybrid (Ritka), ssd + HDD, BeQuite Torony
- Insta360 X4 360 fokos akciókamera
- PS5 PlayStation 5 Slim (lemezes, 1TB) kiváló állapotban! 6 Hónap Jótállás
- Apple Watch Ultra eladó
- Olcsó Notebook! Dell Latitude E7280! I5 7300U / 8GB DDR4 / 256GB SSD!
- GYÖNYÖRŰ iPhone 13 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3293
- HIBÁTLAN iPhone 12 Mini 64GB White -1 ÉV GARANCIA - Kártyafüggetlen, MS3645
- Új pc házak! Kèszleten!
- Bomba ár! Fujitsu T936 Convertible: i5-6G I 8GB I 256SSD I 13,3" FHD Touch I Cam I W10 I Gari!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő