Hack The Planet

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค, cyalume์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

programming

[Visual Studio] Static-Link๋กœ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฒ•

cyalume 2022. 6. 11. 16:23

๋ชฉ์ฐจ



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

๋ฐฉ๋ฒ•๋ก ์— ์•ž์„œ์„œ ์ปดํŒŒ์ผ๊ณผ ๋งํฌ ๋ฐฉ์‹์— ๊ด€ํ•ด ๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. ๋ฐ”์˜๋ฉด ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค์„œ ๋ถ‰์€ ๊ธ€์”จ๋กœ ์“ฐ์ธ '์ •์  ๋งํฌ ์˜ต์…˜์œผ๋กœ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฒ•'๋ถ€ํ„ฐ ๋ณด์ž.

 

์ปดํŒŒ์ผ์ด๋ž€?
๋”๋ณด๊ธฐ

์ด ๊ธ€์€ ์ปดํŒŒ์ผ๊ณผ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ทธ๋ƒฅ ์ธ๊ฐ„์ด ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ธ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋ผ ์†Œ๊ฐœํ•˜๊ฒ ๋‹ค. ์กฐ๊ธˆ ๋” ์œ ์‹ํ•ด๋ณด์ด๊ฒŒ ๋งํ•˜์ž๋ฉด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ 0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DLL์ด๋ž€?
๋”๋ณด๊ธฐ

Dynamic-Link Library์˜ ์•ฝ์ž, ๋™์  ๋งํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ. ์ด๋ฆ„์ด ๊ฑฐ์ฐฝํ•ด๋ณด์ด๊ธด ํ•˜์ง€๋งŒ, ์ด dll์€ ๊ทธ๋ƒฅ.. ๋‹จ์ถ•ํ‚ค ๊ฐ™์€ ์—ญํ• ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค. dll์€ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์žˆ์–ด์„œ ์ž์ฃผ ์“ฐ์ด๋Š”, ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ์ค‘๋ณตํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์ผ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด(๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ์ „๋ถ€ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์‹œ๊ฐ„ ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค!) dll ํŒŒ์ผ์— ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ์กฐ๋ฆฌ ์˜ฎ๊ฒจ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ถˆ๋Ÿฌ ์“ด๋‹ค ์ •๋„๋กœ๋งŒ ์ƒ๊ฐํ•˜์ž. ๋‚˜์ค‘์— DLL์„ ๋‹ค๋ฃจ๋Š” ๊ธ€์„ ์“ธ ๋•Œ ๋” ์ž์„ธํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•˜๊ฒ ๋‹ค.


๋ญ... ์ด๋ ‡๊ฒŒ ํŠน์ • dll์—์„œ ํ•จ์ˆ˜๋ฅผ ๋นŒ๋ ค์™€ ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด, ๊ทธ dll์ด ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ์‹คํ–‰๋  ๋ฆฌ ์—†๋Š” ๊ฑด ๊ธฐ์ •์‚ฌ์‹ค์ด๋‹ค. ๊ทผ๋ฐ ๋‚˜๋Š” ์ด๊ฑธ ์•Œ๋ฉด์„œ๋„ ๋™์  ๋งํฌ ์˜ต์…˜์„ ๊ฑธ๊ณ  ์ปดํŒŒ์ผ์„ ํ•ด๋ฒ„๋ ธ๊ณ …. ๊ทธ๋ž˜์„œ? vs๋ฅผ ์‚ฌ์šฉํ•ด ์ •์  ๋งํฌ ์ปดํŒŒ์ผ์„ ํ•˜๋Š” ๋ฒ•์„ ์จ ๋ณด๊ฒ ๋‹ค.

๋งํฌ ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ Dynamic-Link (๋™์  ๋งํฌ), Static-Link (์ •์  ๋งํฌ)๊ฐ€ ์žˆ๋‹ค.

 

Dynamic-Link (๋™์  ๋งํฌ) ๋ž€?

Visual Studio๊ฐ€ ํƒํ•œ default link ๋ฐฉ์‹. ์‹คํ–‰ํŒŒ์ผ์ด ๋…๋ฆฝ์ ์œผ๋กœ DLL์„ ์ฐธ์กฐํ•œ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ์—๋Š” DLL ์ž์ฒด๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•„ ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ๊ฐ€์ ธ๋‹ค ์“ธ ์ง€์— ๋Œ€ํ•œ ์ •๋ณด (์ฃผ์†Œ)๋งŒ ๋งํฌ๋˜๊ณ , ์‹คํ–‰ ํŒŒ์ผ์€ ๊ทธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ํ•„์š”ํ•œ ํ•จ์ˆ˜๋ฅผ ๊ฐ–๋‹ค ์“ด๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ ์ฐธ์กฐํ•˜๋Š” DLL์ด ๋ถ€์žฌํ•œ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰๋Š”๋‹ค. ์šฐ์›ฉ.. ๋ฌดํŠผ ์ •๋ง ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋งํฌ๋˜์–ด์„œ, ์‹คํ–‰์ด ๋น ๋ฅด๊ณ  ์šฉ๋Ÿ‰์ด ์ž‘๋‹ค๋Š” ์žฅ์ ์ด ์กด์žฌํ•œ๋‹ค.

 

Static-Link (์ •์  ๋งํฌ) ๋ž€?

Linker์— ์˜ํ•ด ์‹คํ–‰ ํŒŒ์ผ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ(.lib)์ด ํฌํ•จ๋œ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ ์ž์ฒด๊ฐ€ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋– ์•ˆ๊ณ  ์žˆ๋Š” ์…ˆ์ด๋ผ, ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ์‹คํ–‰์ด ์ข€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋Œ€์‹  ๋™์  ๋งํฌ์ฒ˜๋Ÿผ ์ปดํ“จํ„ฐ ๋‚ด ์กด์žฌํ•˜๋Š” dll ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ๋‹ค ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์• ์ดˆ์— ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ๋‚ด์— ๋ชจ๋“  ๊ฒŒ ๋‹ค ๋“ค์–ด์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ๋•Œ ๋ณ„๋„๋กœ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์—†๋‹ค. ์ •์  ์ปดํŒŒ์ผ์„ ํ•˜๋ฉด ์ €๋Ÿฐ ์˜ค๋ฅ˜๋„ ์•ˆ ๋–ด๊ฒ ์ง€....

 

Static-Link ์˜ต์…˜์œผ๋กœ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•?

[ํ”„๋กœ์ ํŠธ] -> [์†์„ฑ] ์„ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ์ ํŠธ ์†์„ฑ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ฆฐ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์†์„ฑ ํŽ˜์ด์ง€์—์„œ [C/C++] -> [์ฝ”๋“œ ์ƒ์„ฑ]์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.

์ด๋•Œ debug ๋ชจ๋“œ์™€ release ๋ชจ๋“œ์˜ ์„ค์ • ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋‹ฌ๋ผ์ง„๋‹ค.

Debug mode

[๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ] ํ•ญ๋ชฉ์„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋””๋ฒ„๊ทธ (/MTd) ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

Release mode

[๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ] ํ•ญ๋ชฉ์„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ (/MT) ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.


์ตœ์ข…์ ์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•ด์ค€ ๋’ค ์ปดํŒŒ์ผ ํ•ด์ฃผ๋ฉด ์ด๋ ‡๊ฒŒ ๋ฐ”๋€ ์„ค์ •์— ๋”ฐ๋ผ static ๋ฐฉ์‹์œผ๋กœ link๋˜์–ด, dll์ด ์—†๋Š” ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ๋„ ์ž˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.