์ด๊ฒ์ 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 ์ฌ์ฉ