ํ•ด๊ฒฐlang.UnsatisfiedLinkError: Native Library .์งˆ๋ฌธ

1712 ๋‹จ์–ด ClassLoader
ํ•„์ž๋Š” ์–ผ๋งˆ ์ „์— ๋‘ ํ•ญ๋ชฉ์—์„œ ๊ฐ™์€ applet์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ์— applet์—์„œ dll์กฐ์ž‘(jni ๋˜๋Š” jna ์‚ฌ์šฉ)์„ ํ˜ธ์ถœํ•œ ๋‹ค์Œ์— ํด๋ผ์ด์–ธํŠธ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์„ ๋งŒ๋‚ฌ๋‹ค.์‹ค์ œ ๋ฐฉ๋ฌธ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋จผ์ € ํ”„๋กœ์ ํŠธ A์˜ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋Š”๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ appletA๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. ์ด์–ด์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์ง€ ์•Š๊ณ  ํ”„๋กœ์ ํŠธ B์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๋ฐฉ๋ฌธํ–ˆ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์—์„œ appletB๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค.์• ํ”Œ๋ฆฟA์™€ ์• ํ”Œ๋ฆฟB๋Š” ์‚ฌ์‹ค์ƒ ๊ฐ™์€ ์• ํ”Œ๋ฆฟ์ด๋‹ค. ๋‹จ์ง€ ์ด ์• ํ”Œ๋ฆฟ์€ ๋‘ ํ•ญ๋ชฉ์— ์‚ฌ์šฉ๋˜๊ณ  ๋‘ ํ•ญ๋ชฉ์€ ๋ชจ๋‘ ์ง์ ‘ ๋ฐฉ๋ฌธํ•œ๋‹ค.์ด ๋•Œ ์• ํ”Œ๋ฆฟ B๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
xxx NOT loaded java.lang.UnsatisfiedLinkError : Native Library XXX.dll already loaded in another classloader

appletB์—์„œ appletA์— ์ ‘๊ทผํ•˜๋ฉด appletA์— ์ ‘๊ทผํ•  ๋•Œ๋„ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.ํ•œ ํƒญ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ applet์ด ์‹ค์ œ์ ์œผ๋กœ ๊ฐ™์€ jvm์—์„œ ์‹คํ–‰๋˜๊ณ , ๋‹จ์ง€ applet์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋‹ค๋ฅธclassLoader๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.๋”ฐ๋ผ์„œ appletA๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋“  appletB๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋“  ์ตœ์ข… ์ƒํ™ฉ์€ ์˜์กดํ•˜๋Š” dll์ด ๊ฐ™์€ jvm์— ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์ด์ƒ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ตฌ๊ธ€์„ ์ง„ํ–‰ํ•œ ํ›„์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ™์€ ๋ฌธ์ œ์— ๋ถ€๋”ชํ˜”๋‹ค. ์–ด๋–ค ๊ฒƒ์€ ๊ฐ™์€javaEE ์šฉ๊ธฐ, ์˜ˆ๋ฅผ ๋“ค์–ด (weblogic, jboss) ์ค‘๋ถ€์— ๋‘ ๊ฐœ์˜ jni ํ˜ธ์ถœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์–ด๋–ค ๊ฒƒ์€ ํ•„์ž์™€ ๊ฐ™์€ ๊ฒฝํ—˜์ด๋‹ค.๋งˆ์ง€๋ง‰ ๊ฒฐ๋ก ์€ ํ•œ jvm์—์„œ dll์„ ๋‘ ๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.๋”ฐ๋ผ์„œ ๋’ค์— ์žˆ๋Š” jni๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ™์€ dll์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์œ„์˜ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋Œ€์‘ํ•˜๋Š” ์ž๋ฐ” ํด๋ž˜์Šค๋Š” ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํ•ญ๋ชฉ์ด๋‚˜ applet์€ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. jni์— ์ ‘๊ทผํ•œ ์ฝ”๋“œ๋ฅผ ๋‹จ๋…์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ž์ฒด์˜classLoader๋ฅผ ์ง์ ‘ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์‹œ์Šคํ…œLoader์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋œ๋‹ค.ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ด ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋‹จ๋…์œผ๋กœjar๋กœ ๋ด‰ํ•˜์—ฌ ์ž๋ฐ”์˜ ์‹œ์Šคํ…œLoader๊ฐ€ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณณ, ์˜ˆ๋ฅผ ๋“ค์–ดlib/ext ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ์ด ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.dll์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๋Š” ์‹œ์Šคํ…œ๋กœ๋“œ๋Ÿฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์ด ๊ฐ™์€ dll์— ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋‘ ๋ฒˆ์งธ ํ•ญ๋ชฉ์ด ์ ‘๊ทผํ•  ๋•Œ ์ฐพ์€ ํด๋ž˜์Šค๋Š” ์‹œ์Šคํ…œ๋กœ๋“œ๋Ÿฌ์— ์˜ํ•ด ๋ถˆ๋Ÿฌ์™”๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ์ž์ฒด์˜classLoader๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋น„๊ตํ•ด ๋ณด๋ฉด ์›๋ž˜์˜ appletA, appletB๋Š” ์ˆ˜์ •๋œ ํ›„์— ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค. appletA, appletB, ๊ทธ๋ฆฌ๊ณ  jniAccess.jar, ์—ฌ๊ธฐ์„œ jniAccess.jar๋Š” jre์˜lib ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ext ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์• ํ”Œ๋ฆฟ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
(์›๋ฌธ)http://www.iflym.com/index.php/code/resolve-java-lang-unsatisfiedlinkerror-native-library-dll-already-loaded-in-another-classloader-problem.html

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ