๋ฐ˜์‘ํ˜•

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?

์ฝ”๋”ฉ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์€ ๊ฑฐ์˜ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ถ€ํ„ฐ ์—ด๊นŒ์ง€ ์ผ์ผ์ด ๋งŒ๋“ค์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•˜๊ธฐ๋ž€ ์‰ฝ์ง€๊ฐ€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•ด์•ผ ํ•œ๋‹ค๋ฉด Logging ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค๋กœ ์œ ๋ช…ํ•œ ๊ฒƒ์€ Log4cpp๋‚˜ spdlog, easylogging ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ์ด๋ฏธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด ์™”์œผ๋ฉฐ ๋งŽ์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ด๋ ‡๊ฒŒ ์ข‹์€ ๋ฌด๋ฃŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‘๊ณ  ๋ณธ์ธ์˜ ๊ฒƒ์œผ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์•ˆ์ „์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์€ ์–ด๋Š ์„ธ์›”์— ํ™•๋ณดํ•˜๊ณ , ๋‚จ์•„์žˆ๋Š” ๋‹ค๋ฅธ ์ˆ˜๋งŽ์€ ๋ชจ๋“ˆ๋“ค์€ ์–ธ์ œ ๋งŒ๋“ค๊นŒ์š”?

๋”ฐ๋ผ์„œ ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์ด ์•„๋‹Œ ์ด์ƒ, ์ด๋ฏธ ์•ˆ์ •์„ฑ์ด ํ™•๋ณด๋œ ๋˜๋Š” ๊ฒ€์ฆ๋œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ

Visual Studio์—์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ ๋™์  ์—ฐ๊ฒฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Dynamic Link Library) ๋ฐ ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Static Link Library)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Visual Studio ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ

๋™์  ์—ฐ๊ฒฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์€ *.dll, *.lib ๊ทธ๋ฆฌ๊ณ  *.h์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ”„๋กœ์ ํŠธ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์„ *.lib ๋ฐ *.h์ž…๋‹ˆ๋‹ค. ๊ฐ„ํ˜น, ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ CMake๋กœ ์ง์ ‘ ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋™์  ๋˜๋Š” ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฐ๊ฒฐ ๋ฐฉ์‹

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…์‹œ์  ๋งํ‚น(Explicit Linking)

  • ๋Ÿฐํƒ€์ž„(Runtime) ์ค‘ ํ•„์š”ํ•  ๋•Œ DLL ๋กœ๋”ฉ ๋ฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์ค‘ ์—ฐ๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๊ฐ€ ๋‹จ์ถ•๋œ๋‹ค.
  • ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ, ์ƒˆ๋กœ์šด DLL๋งŒ ๋ฐฐํฌํ•˜๋ฉด ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ์˜ Recompile์ด ํ•„์š” ์—†๋‹ค.

์•”์‹œ์  ๋งํ‚น(Implicit Linking)

์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ(*.exe)์— ํฌํ•จ๋œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํŒŒ์ผ(*.exe)๋งŒ ์žˆ์œผ๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์žˆ๋‹ค.

๋ญ๊ฐ€ ๋” ์ข‹๋‹ค๊ธฐ ๋ณด๋‹ค๋Š”, ๊ฐœ๋ฐœ์ž ์„ ํƒ์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฅด๋ฉด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”ํ›„ DLL ์ƒ์„ฑ ๋ฐ ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•