์˜์–ดํ”„๋ž‘์Šค์–ด์ŠคํŽ˜์ธ์–ด

Ad


์˜จ์›์Šค ํŒŒ๋น„์ฝ˜

abicompat - ํด๋ผ์šฐ๋“œ์˜ ์˜จ๋ผ์ธ

Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์—์„œ abicompat ์‹คํ–‰

์ด๊ฒƒ์€ Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ์›Œํฌ์Šคํ…Œ์ด์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ๊ณต๊ธ‰์ž์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น abicompat์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ:

์ด๋ฆ„


abicompat - ABI ํ˜ธํ™˜์„ฑ ํ™•์ธ

abicompat๋Š” ์ฃผ์–ด์ง„ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๋งํฌํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ์ „ํžˆ
ABI๋Š” ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ›„์† ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ABI ๋น„ํ˜ธํ™˜์„ฑ์„ ๋„์ž…ํ•œ ๋‹ค์Œ abicompat๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ๋น„ํ˜ธํ™˜์„ฑ์ด๋‹ค.

๊ธฐ๋„


abicompat [์˜ต์…˜] [ ]

์˜ต์…˜


ยท --๋„์›€

๋ช…๋ น์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ๋„์›€๋ง์„ ํ‘œ์‹œํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ยท --๋ฒˆ์—ญ | -v

ํ”„๋กœ๊ทธ๋žจ ๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ยท --๋ชฉ๋ก ์ •์˜๋˜์ง€ ์•Š์€ ๊ธฐํ˜ธ | -u

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์˜๋˜์ง€ ์•Š์€ ๊ธฐํ˜ธ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๊ณ  ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ยท --ํ‘œ์‹œ-๋ฒ ์ด์Šค ์ด๋ฆ„ | -b

๋„๊ตฌ์—์„œ ๋‚ด๋ณด๋‚ธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ์—์„œ ์ด ์˜ต์…˜์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ ์ด๋ฆ„์œผ๋กœ๋งŒ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋ฆ„์„ ๋น„๊ตํ•˜๋ ค๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

ยท --์•ฑ-๋””๋ฒ„๊ทธ-์ •๋ณด-๋””๋ ‰ํ„ฐ๋ฆฌ

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐ์น˜๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””๋ฒ„๊ทธ๊ฐ€ ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
info๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ ์„ธํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค.

ยท --lib-๋””๋ฒ„๊ทธ-์ •๋ณด-dir1

์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์˜ ๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ๋ณ„๋„์˜ ํŒŒ์ผ ์„ธํŠธ์— ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ.

ยท --lib-๋””๋ฒ„๊ทธ-์ •๋ณด-dir2

๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์˜ ๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋””๋ฒ„๊ทธ ์ •๋ณด๊ฐ€ ๋ณ„๋„์˜ ํŒŒ์ผ ์„ธํŠธ์— ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ.

ยท --no-show-locs
์œ„์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์Œ ์ดˆ ๊ณต์œ  ๋„์„œ๊ด€ ๊ฐ๊ฐ
์œ ํ˜•์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ยท --์•ฝํ•œ ๋ชจ๋“œ

์ด๊ฒƒ์€ ์•ฝํ•œ ๋ชจ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋น„์ปดํผํŠธ. ์ด ๋ชจ๋“œ์—์„œ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฒ„์ „์˜
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, abicompat๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

abicompat --weak ๋ชจ๋“œ

์ฐธ๊ณ ๋กœ --์•ฝํ•œ ๋ชจ๋“œ ํ•˜๋‚˜์˜ ๋ฒ„์ „๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ต์…˜์„ ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฝ์šฐ, ์•„๋น„์ปดํผํŠธ ์ž๋™์ ์œผ๋กœ
์•ฝํ•œ ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์Šค์œ„์น˜:

์•„๋น„์ปดํผํŠธ

์ด ์•ฝํ•œ ๋ชจ๋“œ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‚ด๋ณด๋‚ธ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜์˜ ์œ ํ˜•๊ณผ
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์†Œ๋น„๋ฉ๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ํ•จ์ˆ˜ ๋ฐ ๋ณ€์ˆ˜์˜ ๊ธฐํ˜ธ์—์„œ์™€ ๊ฐ™์ด
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜๋˜์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ •์˜ ๋ฐ ๋‚ด๋ณด๋ƒ„)
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ˆ์ƒํ•œ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ด๊ฒƒ๋“ค์ด
๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ์œ ํ˜•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์•„๋น„์ปดํผํŠธ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
์žˆ๋‹ค.

์ฆ‰, ์ด ๋ชจ๋“œ์—์„œ๋Š” ์•„๋น„์ปดํผํŠธ ํ•จ์ˆ˜์˜ ์œ ํ˜•๊ณผ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋‚ด๋ณด๋‚ธ ๋ณ€์ˆ˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋™์ผํ•œ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
ABI์— ๊ด€ํ•œ ํ•œ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด ๋ชจ๋“œ์—์„œ๋Š” ์•„๋น„์ปดํผํŠธ ๋‚ด๋ณด๋‚ธ ํ•จ์ˆ˜ ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
(๊ธฐํ˜ธ) ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์ƒํ•˜์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•ฝํ•œ ๋ฐฉ๋ฒ•.

RETURN Values


์ข…๋ฃŒ ์ฝ”๋“œ ์•„๋น„์ปดํผํŠธ ๋ช…๋ น์€ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ABI๊ฐ€
๋น„๊ต๋Š” ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ๋„๊ตฌ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ XNUMX์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ›„์ž์˜ ๊ฒฝ์šฐ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ๊ฐ ๋น„ํŠธ์—
๊ตฌ์ฒด์ ์ธ ์˜๋ฏธ.

๊ฐ’์ด 1์ธ ์ฒซ ๋ฒˆ์งธ ๋น„ํŠธ๋Š” ABIDIFF_ERROR ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ 2์˜ ๋‘ ๋ฒˆ์งธ ๋น„ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…๋ช…๋ฉ๋‹ˆ๋‹ค. ABIDIFF_USAGE_ERROR ๋ฐฉ๋ฒ•์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•Œ ์ˆ˜ ์—†๋Š” ๋ช…๋ น์ค„ ์Šค์œ„์น˜, ์ž˜๋ชป๋œ ๋ฒˆํ˜ธ ๋˜๋Š” ์ธ์ˆ˜ ๋“ฑ์œผ๋กœ ์ด ๋น„ํŠธ๊ฐ€
์„ค์ •ํ•œ ๋‹ค์Œ ABIDIFF_ERROR ๋น„ํŠธ๋„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ 4์˜ ์„ธ ๋ฒˆ์งธ ๋น„ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ABIDIFF_ABI_CHANGE ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ABI๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋น„๊ตํ•˜๋ฉด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ฐ’ 8์˜ ๋„ค ๋ฒˆ์งธ ๋น„ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…๋ช…๋ฉ๋‹ˆ๋‹ค. ABIDIFF_ABI_INCOMPATIBLE_CHANGE ์˜ ABI๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋น„๊ต๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด
ABIDIFF_ABI_CHANGE ๋น„ํŠธ๋„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ABIDIFF_ABI_CHANGE ์„ค์ •๋˜๊ณ 
ABIDIFF_INCOMPATIBLE_CHANGE is ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋ฉด ๋น„๊ต๋˜๋Š” ABI๊ฐ€
๋˜๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ธ๊ฐ„์€ ABI ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ˜ธํ™˜๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ๋น„ํŠธ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ• ์‚ฌ์šฉ ์˜ˆ


ยท ์ƒˆ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์—์„œ ๊ฐ€๋Šฅํ•œ ABI ๋น„ํ˜ธํ™˜์„ฑ ๊ฐ์ง€:

$ ๊ณ ์–‘์ด -n test0.h
1 ๊ตฌ์กฐ์ฒด ํ‘ธ
์‚ผ {
3 ์ •์ˆ˜ m0;
4
5 ํ‘ธ()
6 : m0()
7{}
8};
9
10ํ‘ธ*
11 ์ฒซ ๋ฒˆ์งธ_func();
12
13 ๋ฌดํšจ
14์ดˆ_ํŽ‘ํฌ(ํ‘ธ&);
15
16 ๋ฌดํšจ
17ํ™”
$

$ ๊ณ ์–‘์ด -n test-app.cc
1 // ์ปดํŒŒ์ผ:
2 // g++ -g -๋ฒฝ -o ํ…Œ์ŠคํŠธ ์•ฑ -L. -ltest-0 test-app.cc
3
4 # "test0.h" ํฌํ•จ
5
6 ์ •์ˆ˜
7 ๋ฉ”์ธ()
์‚ผ {
9 foo* f = first_func();
10์ดˆ_ํ•จ์ˆ˜(*f);
11 ๋ฐ˜ํ™˜ 0;
12}
$

$ ๊ณ ์–‘์ด -n test0.cc
1 // ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.
2 // g++ -g -๋ฒฝ -๊ณต์œ  -o libtest-0.so test0.cc
3
4 # "test0.h" ํฌํ•จ
5
6ํ‘ธ*
7 ์ฒซ ๋ฒˆ์งธ_ํ•จ์ˆ˜()
์‚ผ {
9 foo* f = ์ƒˆ๋กœ์šด foo();
10 ๋ฐ˜ํ™˜ f;
11}
12
13 ๋ฌดํšจ
14์ดˆ_func(foo&)
์‚ผ {
16}
17
18 ๋ฌดํšจ
19ํ™”
์‚ผ {
21}
$

$ ๊ณ ์–‘์ด -n test1.h
1 ๊ตฌ์กฐ์ฒด ํ‘ธ
์‚ผ {
3 ์ •์ˆ˜ m0;
4์ž m1; /* <-- ์—ฌ๊ธฐ์— ์ƒˆ ๋ฉค๋ฒ„๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค! */
5
6 ํ‘ธ()
7 : m0(),
8m1()
9{}
10};
11
12ํ‘ธ*
13 ์ฒซ ๋ฒˆ์งธ_func();
14
15 ๋ฌดํšจ
16์ดˆ_ํŽ‘ํฌ(ํ‘ธ&);
17
18 ๋ฌดํšจ
19ํ™”
$

$ ๊ณ ์–‘์ด -n test1.cc
1 // ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.
2 // g++ -g -๋ฒฝ -๊ณต์œ  -o libtest-1.so test1.cc
3
4 # "test1.h" ํฌํ•จ
5
6ํ‘ธ*
7 ์ฒซ ๋ฒˆ์งธ_ํ•จ์ˆ˜()
์‚ผ {
9 foo* f = ์ƒˆ๋กœ์šด foo();
10 ๋ฐ˜ํ™˜ f;
11}
12
13 ๋ฌดํšจ
14์ดˆ_func(foo&)
์‚ผ {
16}
17
18 /* third_func()์˜ ์ •์˜๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์ž
19 ๋ฌดํšจ
20ํ™”
์‚ผ {
22}
23*/
$

ยท ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. libtest-0.so ๊ณผ
libtest-1.so:

$ g++ -g -๋ฒฝ -๊ณต์œ  -o libtest-0.so test0.cc
$ g++ -g -๋ฒฝ -๊ณต์œ  -o libtest-1.so test1.cc

ยท ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์— ๋Œ€ํ•ด ๋งํฌํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ ํ…Œ์ŠคํŠธ ์•ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ:

$ g++ -g -๋ฒฝ -o ํ…Œ์ŠคํŠธ ์•ฑ -L. -ltest-0.so test-app.cc

ยท ์ด์ œ ์‚ฌ์šฉ ์•„๋น„์ปดํผํŠธ libtest-1.so๊ฐ€ ABI์™€ ์•ฑ๊ณผ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด
libtest-0.so์˜ ABI:

$ abicompat ํ…Œ์ŠคํŠธ ์•ฑ libtest-0.so libtest-1.so
ELF ํŒŒ์ผ 'test-app'์€ ์•„๋ž˜ 'libtest-1.so'์™€์˜ ์ฐจ์ด์ ์œผ๋กœ ์ธํ•ด 'libtest-0.so'์™€ ABI ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์š”์•ฝ: 0 ์ œ๊ฑฐ, 2 ๋ณ€๊ฒฝ, 0 ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ์š”์•ฝ: 0 ์ œ๊ฑฐ๋จ, 0 ๋ณ€๊ฒฝ๋จ, 0 ์ถ”๊ฐ€๋œ ๋ณ€์ˆ˜

๊ฐ„์ ‘์ ์ธ ํ•˜์œ„ ์œ ํ˜• ๋ณ€๊ฒฝ์ด ์žˆ๋Š” 2๊ฐœ์˜ ํ•จ์ˆ˜:

[C]'function foo* first_func()'์—๋Š” ๊ฐ„์ ‘์ ์ธ ํ•˜์œ„ ์œ ํ˜• ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜ ์œ ํ˜• ๋ณ€๊ฒฝ๋จ:
'struct foo' ์œ ํ˜•์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
ํฌ๊ธฐ๊ฐ€ 32๋น„ํŠธ์—์„œ 64๋น„ํŠธ๋กœ ๋ณ€๊ฒฝ๋จ
1 ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„ ์‚ฝ์ž…:
์˜คํ”„์…‹ 1์—์„œ 'char foo::m32'(๋น„ํŠธ ๋‹จ์œ„)
[C]'function void second_func(foo&)'์— ๊ฐ„์ ‘์ ์ธ ํ•˜์œ„ ์œ ํ˜• ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'foo&' ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ 0์— ํ•˜์œ„ ์œ ํ˜• ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ฐธ์กฐ๋œ ์œ ํ˜• 'struct foo'๊ฐ€ ์ด์ „์— ๋ณด๊ณ ๋œ ๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

$

ยท ์ด์ œ abicompat์˜ ์•ฝํ•œ ๋ชจ๋“œ, ์ฆ‰ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ ๋ฒ„์ „:

$ abicompat --weak-mode ํ…Œ์ŠคํŠธ-์•ฑ libtest-1.so
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ •์˜๋œ ํ•จ์ˆ˜
'libtest-1.so'
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋‹ค๋ฅธ ํ•˜์œ„ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
'ํ…Œ์ŠคํŠธ ์•ฑ'
์˜ˆ์ƒ:

ํ•จ์ˆ˜ foo* first_func():
๋ฐ˜ํ™˜ ์œ ํ˜• ๋ณ€๊ฒฝ๋จ:
'struct foo' ์œ ํ˜•์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
ํฌ๊ธฐ๊ฐ€ 32๋น„ํŠธ์—์„œ 64๋น„ํŠธ๋กœ ๋ณ€๊ฒฝ๋จ
1 ๋ฐ์ดํ„ฐ ๋ฉค๋ฒ„ ์‚ฝ์ž…:
์˜คํ”„์…‹ 1์—์„œ 'char foo::m32'(๋น„ํŠธ ๋‹จ์œ„)

$

onworks.net ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋ผ์ธ์œผ๋กœ abicompat ์‚ฌ์šฉ


๋ฌด๋ฃŒ ์„œ๋ฒ„ ๋ฐ ์›Œํฌ์Šคํ…Œ์ด์…˜

Windows ๋ฐ Linux ์•ฑ ๋‹ค์šด๋กœ๋“œ

Linux ๋ช…๋ น

Ad