νƒœκ·Έ 보관물: unix

unix

μ†ŒμŠ€μ—μ„œ μ»΄νŒŒμΌν•˜λŠ” 법 배우기 (Unix / Linux / OSXμ—μ„œ) μ’…μ’… μžˆμŠ΅λ‹ˆλ‹€.

κ°€λŠ₯ν•œ 경우 νŒ¨ν‚€μ§€ (MacPorts / apt-get)μ—μ„œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„€μΉ˜ν•˜λŠ” λ™μ•ˆ μ†ŒμŠ€μ—μ„œ νŒ¨ν‚€μ§€λ₯Ό μ»΄νŒŒμΌν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ μ’…μ’… μžˆμŠ΅λ‹ˆλ‹€. ./configure && make && sudo make install일반적으둜 μΆ©λΆ„ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° λ•Œλ‘œλŠ” μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μ’…μ’… μžˆμŠ΅λ‹ˆλ‹€. 이것은 거의 항상 μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ‹€λ₯Έ 라이브러리 쒅속성과 관련이 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ„ 배우고 μ‹ΆμŠ΅λ‹ˆλ‹€.

  • μ–΄λ–€ 인수λ₯Ό μ „λ‹¬ν•΄μ•Όν•˜λŠ”μ§€ μ–΄λ–»κ²Œ μ•Œ 수 ./configureμžˆμŠ΅λ‹ˆκΉŒ?
  • OS X / Linuxμ—μ„œ 곡유 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μž‘λ™ν•˜λŠ” 방식-파일 μ‹œμŠ€ν…œμ—μ„œ ./configure && makeμƒμ£Όν•˜λŠ” μœ„μΉ˜, μ°ΎλŠ” 방법, λ§ν¬μ‹œ μ‹€μ œλ‘œ λ°œμƒν•˜λŠ” 상황
  • 곡유 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ •μ μœΌλ‘œ 링크 된 라이브러리의 μ‹€μ œ 차이점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ™œ μ •μ μœΌλ‘œ λͺ¨λ“  것을 μ •μ μœΌλ‘œ 링크 ν•  수 μ—†μŠ΅λ‹ˆκΉŒ (μš”μ¦˜ RAMκ³Ό λ””μŠ€ν¬ 곡간이 μ €λ ΄ν•©λ‹ˆλ‹€) λ”°λΌμ„œ μ΄μƒν•œ 라이브러리 버전 μΆ©λŒμ„ ν”Όν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
  • μ–΄λ–€ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ–΄λ–€ 버전을 μ„€μΉ˜ν–ˆλŠ”μ§€ μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?
  • 일반 μ‹œμŠ€ν…œμ„ μ€‘λ‹¨ν•˜μ§€ μ•Šκ³  μ—¬λŸ¬ λ²„μ „μ˜ 라이브러리λ₯Ό μ„€μΉ˜ν•˜λ €λ©΄ μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ?
  • λ‚΄κ°€ν•˜λ©΄ ν•˜κ³  그렇지 μ•ŠμœΌλ©΄ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬λ˜λŠ” μ‹œμŠ€ν…œμ— μ†ŒμŠ€ 재료λ₯Ό μ„€μΉ˜, κ·Έλ ‡κ²Œν•˜λŠ” κ°€μž₯ κΉ¨λ—ν•œ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
  • μ†ŒμŠ€μ—μ„œ 무언가λ₯Ό 어렴풋이 μ»΄νŒŒμΌν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ μ–΄λ–»κ²Œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 같은 λ†κ΅¬λŒ€λ₯Ό λ›°μ–΄ λ„˜μ„ ν•„μš”κ°€ 없도둝 νŒ¨ν‚€μ§€λ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆκΉŒ? 특히 OS Xμ—μ„œ …
  • 이 κΈ°λŠ₯을 읡히렀면 λ§ˆμŠ€ν„°ν•΄μ•Όν•˜λŠ” λͺ…λ Ή 쀄 λ„κ΅¬λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? otool, pkg-config λ“±κ³Ό 같은 것듀

λ‚˜λŠ” 여기에 κ½€ λ§Žμ€ μ‹œκ°„κ³Ό λ…Έλ ₯을 투자 ν•  의ν–₯이 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ§ˆλ¬Έμ— 직접 λŒ€λ‹΅ν•˜κ³  μ‹Άμ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 지식 λ‚˜λŠ” μ‹€μ œλ‘œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ μ΄ν•΄ν•΄μ•Όν•˜λ―€λ‘œ 슀슀둜 문제λ₯Ό μ°Ύμ•„μ•Όν•©λ‹ˆλ‹€.



λ‹΅λ³€

λͺ¨λ“  것에 직접 λŒ€λ‹΅ ν•΄ λ“œλ € μ£„μ†‘ν•˜μ§€λ§Œ μœ μš©ν•œ μžμŠ΅μ„œ, FAQ 등을 λͺ¨λ¦…λ‹ˆλ‹€. 기본적으둜 λ‹€μŒμ€ λ°μŠ€ν¬ν†± μ•± (배포에 도움이 됨), 쒌절 및 인터넷 κ²€μƒ‰μ˜ 8 λ…„μž…λ‹ˆλ‹€.

1. ./configure에 전달할 인수λ₯Ό μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ‹€μ œλ‘œ μ—°μŠ΅ν•˜μ‹­μ‹œμ˜€. AutotoolsλŠ” 일관성이 있기 λ•Œλ¬Έμ— μΆ©λΆ„νžˆ μ‰½μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ cmake λ˜λŠ” μ‚¬μš©μž μ •μ˜ λΉŒλ“œ 슀크립트λ₯Ό μ‚¬μš©ν•˜μ—¬ λ§Žμ€ 것듀이 μžˆμŠ΅λ‹ˆλ‹€. 일반적으둜 κ΅¬μ„±ν•˜κΈ° μœ„ν•΄ 아무것도 μ „λ‹¬ν•˜μ§€ μ•Šμ•„λ„λ©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ foo-tool을 λΉŒλ“œ ν•  수 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μ•Œμ•„ λ‚΄μ•Όν•©λ‹ˆλ‹€.

ꡬ성 및 GNU λ„κ΅¬λŠ” λͺ¨λ‘ /, / usr 및 / usr / localμ—μ„œ 쒅속성을 μ°ΎμŠ΅λ‹ˆλ‹€. MacPorts λ˜λŠ” Finkμ—μ„œ 쒅속성을 μ„€μΉ˜ ν•œ 경우 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” λ‹€λ₯Έ μœ„μΉ˜λ₯Ό μ„€μΉ˜ν•˜λŠ” 경우 GNU 도ꡬ가 μ΄λŸ¬ν•œ 쒅속성을 찾을 수 μžˆλ„λ‘ μ…Έ ν™˜κ²½μ„ κ΅¬μ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λ €λ©΄ ν”Œλž˜κ·Έλ₯Ό μ „λ‹¬ν•΄μ•Όν•©λ‹ˆλ‹€.

2. OS X / Linuxμ—μ„œ 곡유 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μž‘λ™ν•˜λŠ” 방식-파일 μ‹œμŠ€ν…œμ— μƒμ£Όν•˜λŠ” μœ„μΉ˜, ./configure && 검색 방법, λ§ν¬μ‹œ μ‹€μ œλ‘œ λ°œμƒν•˜λŠ” 상황

Linuxμ—μ„œλŠ” 동적 링컀가 찾을 μˆ˜μžˆλŠ” κ²½λ‘œμ— μ„€μΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€. μ΄λŠ” LD_LIBRARY_PATHν™˜κ²½ λ³€μˆ˜μ™€ /etc/ld.conf의 λ‚΄μš©μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€ . Macμ—μ„œλŠ” Xcode ν”„λ‘œμ νŠΈκ°€ μ•„λ‹Œ ν•œ λŒ€λΆ€λΆ„μ˜ μ˜€ν”ˆ μ†ŒμŠ€ μ†Œν”„νŠΈμ›¨μ–΄μ™€ 거의 λ™μΌν•©λ‹ˆλ‹€. DYLD_LIBRARY_PATHλŒ€μ‹  env λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

링컀가 라이브러리λ₯Ό κ²€μƒ‰ν•˜λŠ” κΈ°λ³Έ κ²½λ‘œκ°€ μžˆμŠ΅λ‹ˆλ‹€. / lib : / usr / lib : / usr / local / libμž…λ‹ˆλ‹€.

CPATH λ³€μˆ˜ λ˜λŠ” CFLAGS λ˜λŠ” λ‹€λ₯Έ λ§Žμ€ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬μ΄λ₯Ό 보완 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (μ‹€μ œλ‘œλŠ” λ³΅μž‘ν•¨). CFLAGSλŠ” λ‹€μŒκ³Ό 같이 μ œμ•ˆν•©λ‹ˆλ‹€.

CFLAGS = β€œ$ CFLAGS -L / new / path”내보내기

-L 맀개 λ³€μˆ˜λŠ” 링크 κ²½λ‘œμ— μΆ”κ°€ν•©λ‹ˆλ‹€.

ν˜„λŒ€λŠ” pkg-config 도ꡬλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ΅œμ‹  μ„€μΉ˜ ν•­λͺ©μ€ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 라이브러리의 μœ„μΉ˜ 및 링크 방법을 μ„€λͺ…ν•˜λŠ” .pc νŒŒμΌλ„ μ„€μΉ˜ν•©λ‹ˆλ‹€. 이것은 인생을 더 μ‰½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ OS X 10.5와 ν•¨κ»˜ μ œκ³΅λ˜μ§€ μ•ŠμœΌλ―€λ‘œ μ„€μΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€. λ˜ν•œ λ§Žμ€ κΈ°λ³Έ λŽμ€ 그것을 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ—°κ²° λ™μž‘μ€ β€œλŸ°νƒ€μž„μ—μ΄ ν•¨μˆ˜λ₯Ό ν•΄κ²°β€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‹€μ œλ‘œ 큰 λ¬Έμžμ—΄ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.

3. 곡유 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ •μ μœΌλ‘œ 링크 된 라이브러리의 μ‹€μ œ 차이점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ™œ μ •μ μœΌλ‘œ λͺ¨λ“  것을 μ •μ μœΌλ‘œ 링크 ν•  수 μ—†μŠ΅λ‹ˆκΉŒ (μš”μ¦˜ RAMκ³Ό λ””μŠ€ν¬ 곡간이 μ €λ ΄ν•©λ‹ˆλ‹€) λ”°λΌμ„œ μ΄μƒν•œ 라이브러리 버전 μΆ©λŒμ„ ν”Όν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

정적 라이브러리 νŒŒμΌμ— λ§ν¬ν•˜λ©΄ μ½”λ“œκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μΌλΆ€κ°€λ©λ‹ˆλ‹€. ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬μ— κ±°λŒ€ν•œ .c 파일이 ν•˜λ‚˜ 있고 μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ 컴파일 ν•œ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

동적 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ™μΌν•œ μ½”λ“œλ₯Ό κ°–μ§€λ§Œ 앱이 싀행될 λ•Œ λŸ°νƒ€μž„μ— μ½”λ“œκ°€ μ•±μ—λ‘œλ“œλ©λ‹ˆλ‹€ (κ°„λ‹¨ν•œ μ„€λͺ…).

μ •μ μœΌλ‘œ λͺ¨λ“  것에 링크 ν•  수 μžˆμ§€λ§Œ, 거의 λͺ¨λ“  λΉŒλ“œ μ‹œμŠ€ν…œμ΄μ΄λ₯Ό μ‰½κ²Œ λ§Œλ“€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λΉŒλ“œ μ‹œμŠ€ν…œ νŒŒμΌμ„ μˆ˜λ™μœΌλ‘œ νŽΈμ§‘ν•΄μ•Όν•©λ‹ˆλ‹€ (예 : Makefile.am λ˜λŠ” CMakeLists.txt). κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ λ²„μ „μ˜ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•„μš”ν•œ 것을 μ •κΈ°μ μœΌλ‘œ μ„€μΉ˜ν•˜κ³  λ³‘λ ¬λ‘œ μ„€μΉ˜ν•˜λŠ” 것이 μ–΄λ €μš΄ κ²½μš°μ—λŠ” ν•™μŠ΅ ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

νŠΈλ¦­μ€ 링크 라인을 -lfooμ—μ„œ -l / path / to / static / foo.a둜 λ³€κ²½ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ°Ύμ•„μ„œ λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 도ꡬ가 ldd foo λ˜λŠ” otool -L fooλ₯Ό μ‚¬μš©ν•˜μ—¬ .so λ˜λŠ” dylib에 μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ€μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

또 λ‹€λ₯Έ λ¬Έμ œλŠ” λͺ¨λ“  λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 정적 라이브러리둜 μ»΄νŒŒμΌλ˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. λ§Žμ€ μ‚¬λžŒλ“€μ΄ κ·Έλ ‡μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ MacPorts λ˜λŠ” Debian은 μ œκ³΅ν•˜μ§€ μ•ŠκΈ°λ‘œ κ²°μ •ν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

4. μ„€μΉ˜ ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 버전을 μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?

ν•΄λ‹Ή λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ pkg-config 파일이 있으면 μ‰½μŠ΅λ‹ˆλ‹€.

pkg-config –list-all

그렇지 μ•ŠμœΌλ©΄ μ’…μ’… μ‰½κ²Œ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. dylibλŠ” 라이브러리 버전과 λ™μΌν•œ soname (예 : foo.0.1.dylib, soname은 0.1)을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. soname은 이진 계산 κΈ°λŠ₯μ΄λ―€λ‘œ 라이브러리의 ν•¨μˆ˜ ν˜•μ‹μ„ λ³€κ²½ν•˜λ©΄ soname의 μ£Όμš” 뢀뢄을 μΆ©λŒμ‹œμΌœμ•Όν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. 2.0 라이브러리의 버전 14.0.5 soname 이것은 μΌλ°˜μ μ΄μ§€ μ•Šμ§€λ§Œ.

λ‚˜λŠ” 이런 μ’…λ₯˜μ˜ 일에 μ’Œμ ˆν•˜κ³  Macμ—μ„œ μ΄κ²ƒμ„μœ„ν•œ μ†”λ£¨μ…˜μ„ κ°œλ°œν–ˆμœΌλ©° λ‹€μŒμ— 그것에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

5. 일반 μ‹œμŠ€ν…œμ„ μ†μƒμ‹œν‚€μ§€ μ•Šκ³  μ—¬λŸ¬ λ²„μ „μ˜ 라이브러리λ₯Ό μ–΄λ–»κ²Œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

이것에 λŒ€ν•œ λ‚˜μ˜ 해결책은 여기에 μžˆμŠ΅λ‹ˆλ‹€ : http://github.com/mxcl/homebrew/

μ†ŒμŠ€μ—μ„œ μ„€μΉ˜ν•˜λŠ” 것을 μ’‹μ•„ν•˜κ³  일뢀 νŒ¨ν‚€μ§€ 관리λ₯Ό 톡해 μ‰½κ²Œ λ§Œλ“€ μˆ˜μžˆλŠ” 도ꡬλ₯Ό μ›ν–ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ Homebrewλ₯Ό μ‚¬μš©ν•˜μ—¬ λΉŒλ“œν•©λ‹ˆλ‹€. μ†ŒμŠ€μ—μ„œ λ‚˜μ™”μ§€λ§Œ νŠΉλ³„ν•œ μ ‘λ‘μ‚¬λ‘œ μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.

/usr/local/Cellar/wget/1.1.4

그런 λ‹€μŒ homebrew 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  것을 / usr / local에 심볼릭 λ§ν¬ν•˜λ―€λ‘œ / usr / local / bin / wget 및 /usr/local/lib/libwget.dylibκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜μ€‘μ— λ‹€λ₯Έ λ²„μ „μ˜ wget이 ν•„μš”ν•œ 경우 λ³‘λ ¬λ‘œ μ„€μΉ˜ν•˜κ³  / usr / local νŠΈλ¦¬μ— μ—°κ²°λœ 버전을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6. λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬λ˜λŠ” μ‹œμŠ€ν…œμ— μ†ŒμŠ€μ˜ 자료λ₯Ό μ„€μΉ˜ν•˜λŠ” 경우 κ°€μž₯ κΉ¨λ—ν•œ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚˜λŠ” Homebrew 방법이 κ°€μž₯ κΉ¨λ—ν•˜λ‹€κ³  β€‹β€‹μƒκ°ν•˜λ―€λ‘œ μ‚¬μš©ν•˜κ±°λ‚˜ 이에 μƒμ‘ν•˜λŠ” 방법을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. / usr / local / pkgs / name / version에 μ„€μΉ˜ν•˜κ³  λ‚˜λ¨Έμ§€λ₯Ό symlink λ˜λŠ” ν•˜λ“œ 링크둜 μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.

/ usr / local을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  λΉŒλ“œ λ„κ΅¬λŠ” 쒅속성과 헀더λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ 인생은 훨씬 μ‰¬μ›Œ 질 것 μž…λ‹ˆλ‹€.

7. μ†ŒμŠ€μ—μ„œ 무언가λ₯Ό μ–΄λ ΄ν’‹ν•˜κ²Œ μ»΄νŒŒμΌν•œλ‹€κ³  κ°€μ •ν•˜λ©΄, λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ 같은 λ†κ΅¬λŒ€λ₯Ό λ›°μ–΄ λ„˜μ„ ν•„μš”κ°€ 없도둝 μ–΄λ–»κ²Œ νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆκΉŒ? 특히 OS Xμ—μ„œ …

쒅속성이 μ—†μœΌλ©΄ λΉŒλ“œ 디렉토리λ₯Ό μ••μΆ• ν•΄μ œν•˜μ—¬ β€œmake install”을 μˆ˜ν–‰ ν•  μˆ˜μžˆλŠ” λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 제곡 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ™μΌν•œ λ²„μ „μ˜ OS X에 λŒ€ν•΄μ„œλ§Œ μ•ˆμ •μ μœΌλ‘œμ΄ μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Linuxμ—μ„œλŠ” μ•„λ§ˆλ„ λ™μΌν•œ 컀널 버전 및 libc λΆ€ λ²„μ „μ˜ μœ μ‚¬ν•œ Linux (예 : Ubuntu)μ—μ„œ μž‘λ™ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°”μ΄λ„ˆλ¦¬λ₯Ό μœ λ‹‰μŠ€μ— λ°°ν¬ν•˜κΈ°κ°€ 쉽지 μ•Šμ€ μ΄μœ λŠ” λ°”μ΄λ„ˆλ¦¬ ν˜Έν™˜μ„± λ•Œλ¬Έμž…λ‹ˆλ‹€. GNU μ‚¬λžŒλ“€κ³Ό λ‹€λ₯Έ μ‚¬λžŒλ“€μ€ 이진 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 자주 λ°”κΏ‰λ‹ˆλ‹€.

기본적으둜 λ°”μ΄λ„ˆλ¦¬λ₯Ό λ°°ν¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 상황은 μ•„λ§ˆλ„ 맀우 μ΄μƒν•œ λ°©μ‹μœΌλ‘œ 깨질 κ²ƒμž…λ‹ˆλ‹€.

Macμ—μ„œ κ°€μž₯ 쒋은 방법은 macports νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€. λˆ„κ΅¬λ‚˜ macportsλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. Linuxμ—λŠ” λ„ˆλ¬΄ λ§Žμ€ λΉŒλ“œ μ‹œμŠ€ν…œκ³Ό 쑰합이 μžˆμœΌλ―€λ‘œ μ΄μƒν•œ κ΅¬μ„±μœΌλ‘œ x 도ꡬλ₯Ό μž‘μ„±ν•˜λŠ” 방법에 λŒ€ν•œ λΈ”λ‘œκ·Έ ν•­λͺ©μ„ μž‘μ„±ν•˜λŠ” 것보닀 더 λ‚˜μ€ 쑰언은 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

macports λ˜λŠ” homebrew에 λŒ€ν•œ νŒ¨ν‚€μ§€ μ„€λͺ…을 μž‘μ„±ν•˜λ©΄ λˆ„κ΅¬λ‚˜ ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  수 있으며 쒅속성 λ¬Έμ œλ„ ν•΄κ²°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 μ‰¬μš΄ 일이 μ•„λ‹ˆλ©°, 메인 macports νŠΈλ¦¬μ— macports λ ˆμ‹œν”Όλ₯Ό ν¬ν•¨μ‹œν‚€λŠ” 것도 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ macportsλŠ” 이ꡭ적인 μ„€μΉ˜ μœ ν˜•μ„ μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©° λͺ¨λ“  νŒ¨ν‚€μ§€μ— λŒ€ν•΄ ν•˜λ‚˜μ˜ 선택을 μ œκ³΅ν•©λ‹ˆλ‹€.

Homebrew의 미래 λͺ©ν‘œ 쀑 ν•˜λ‚˜λŠ” μ›Ή μ‚¬μ΄νŠΈμ˜ 링크λ₯Ό 클릭 ν•  μˆ˜μžˆκ²Œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ (예 : homebrew : // blah 및 Ruby 슀크립트λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ depλ₯Ό μ„€μΉ˜ ν•œ λ‹€μŒ 앱을 λΉŒλ“œν•©λ‹ˆλ‹€). 아직 μ™„λ£Œν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ„ νƒν•œ λ””μžμΈμ„ κ³ λ €ν•˜λ©΄ λ„ˆλ¬΄ κΉŒλ‹€ 둭지 μ•ŠμŠ΅λ‹ˆλ‹€.

8.이 κΈ°λŠ₯을 읡히기 μœ„ν•΄ λ§ˆμŠ€ν„°ν•΄μ•Όν•˜λŠ” λͺ…λ Ή 쀄 λ„κ΅¬λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? otool, pkg-config λ“±κ³Ό 같은 것듀

otool은 λ‚˜μ€‘μ— 만 μœ μš©ν•©λ‹ˆλ‹€. λΉŒλ“œ 된 λ°”μ΄λ„ˆλ¦¬ 링크가 무엇인지 μ•Œλ €μ€λ‹ˆλ‹€. λΉŒλ“œν•΄μ•Όν•˜λŠ” λ„κ΅¬μ˜ 쒅속성을 νŒŒμ•…ν•  λ•ŒλŠ” μ“Έλͺ¨κ°€ μ—†μŠ΅λ‹ˆλ‹€. pkg-config의 경우 쒅속성을 μ‚¬μš©ν•˜κΈ° 전에 이미 μ„€μΉ˜ ν–ˆμœΌλ―€λ‘œ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

λ‚΄ νˆ΄μ²΄μΈμ€ README 및 INSTALL νŒŒμΌμ„ 읽고 configure –helpλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. λΉŒλ“œ 좜λ ₯을보고 정상인지 ν™•μΈν•˜μ‹­μ‹œμ˜€. λΉŒλ“œ 였λ₯˜λ₯Ό ꡬ문 λΆ„μ„ν•˜μ‹­μ‹œμ˜€. μ•„λ§ˆλ„ λ‚˜μ€‘μ— serverfault에 λ¬Έμ˜ν•˜μ‹­μ‹œμ˜€ πŸ™‚


λ‹΅λ³€

이 κ±°λŒ€ν•œ 주제λ₯Ό κ·Έλ ‡κ²Œ (Linux 및 λ§ˆν•˜-O OS Xμ—μ„œμ˜ ELF) λ¦¬λˆ…μŠ€μ˜ 곡유 라이브러리λ₯Ό μ‹œμž‘ν•  μˆ˜μžˆλ‹€, 울리히 Drepperκ°€ 쒋은가 DSOλ₯Ό μž‘μ„± μ†Œκ°œ λ¦¬λˆ…μŠ€ μ‚¬μš©ν•  μˆ˜μ— 곡유 라이브러리의 일뢀 역사λ₯Ό 닀루고 μžˆμŠ΅λ‹ˆλ‹€ (동적 곡유 객체) μ€‘μš”ν•œ 이유λ₯Ό ν¬ν•¨ν•˜μ—¬ 여기에

UlrichλŠ” λ˜ν•œ 정적 링크가 μœ ν•΄ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜λŠ” 이유λ₯Ό μ„€λͺ… ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ 핡심 μ—…λ°μ΄νŠΈ 쀑 ν•˜λ‚˜λŠ” λ³΄μ•ˆ μ—…λ°μ΄νŠΈμž…λ‹ˆλ‹€. μ •μ μœΌλ‘œ κ΄‘λ²”μœ„ν•˜κ²Œ 링크 된 곡톡 라이브러리 (예 : zlib)의 버퍼 μ˜€λ²„ ν”Œλ‘œμš°λŠ” 뢄배에 큰 μ˜€λ²„ ν—€λ“œλ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” zlib 1.1.3μ—μ„œ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ ( Red Hat ꢌ고 )

꼬마 μš”μ •

링컀 ld.so 맀뉴얼 νŽ˜μ΄μ§€

man ld.so

λŸ°νƒ€μž„ 동적 링크와 κ΄€λ ¨λœ κΈ°λ³Έ 경둜 및 νŒŒμΌμ„ μ„€λͺ…ν•©λ‹ˆλ‹€. μ΅œμ‹  Linux μ‹œμŠ€ν…œμ—μ„œλŠ” /etc/ld.so.confλ₯Ό 톡해 μΆ”κ°€ 된 μΆ”κ°€ κ²½λ‘œκ°€ 일반적으둜 /etc/ld.so.conf에 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

ld.so ꡬ성을 톡해 λ™μ μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•œ ν•­λͺ©μ„ 보렀면 λ‹€μŒμ„ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

ldconfig -v -N -X

DSO ν•˜μš°νˆ¬λ₯Ό 읽으면 OS X의 Mach-O에 μ΄λŸ¬ν•œ 원칙이 μ–΄λ–»κ²Œ μ μš©λ˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ 쒋은 κΈ°λ³Έ 지식 μˆ˜μ€€μ„ μ œκ³΅ν•΄μ•Όν•©λ‹ˆλ‹€.

마 ν•˜μ˜€

OS Xμ—μ„œ 이진 ν˜•μ‹μ€ Mach-Oμž…λ‹ˆλ‹€. 링컀에 λŒ€ν•œ 둜컬 μ‹œμŠ€ν…œ μ„€λͺ…μ„œλŠ”

man dyld

λ§ˆν•˜ ν˜•μ‹μ˜ λ¬Έμ„œλŠ” μ• ν”Œμ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€

μœ λ‹‰μŠ€ λΉŒλ“œ 툴

일반적인 configure, make, make install과정은 일반적으둜 가지고 GNU의 autotoolsλ₯Όμ— μ˜ν•΄ μ œκ³΅λ˜λŠ” 온라인 μ±… κ΅¬μ„±μ˜ μ—­μ‚¬μ˜ 일뢀가 / λΆ„ν• κ³Ό GNU νˆ΄μ²΄μΈμ„ ꡬ좕 λ‹€λ£Ήλ‹ˆλ‹€. Autoconf λŠ” ν…ŒμŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€μƒ λΉŒλ“œ μ‹œμŠ€ν…œμ—μ„œ κΈ°λŠ₯ κ°€μš©μ„±μ„ κ²°μ •ν•˜κ³  M4 맀크둜 μ–Έμ–΄ λ₯Ό μ‚¬μš©ν•˜μ—¬μ΄λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€ . Automake λŠ” 기본적으둜 Makefile의 ν…œν”Œλ¦Ώ λ°©λ²•μœΌλ‘œ, 일반적으둜 Makefile.amμ΄λΌκ³ ν•˜λŠ” ν…œν”Œλ¦ΏμœΌλ‘œ autoconf (configure 슀크립트)의 좜λ ₯이 Makefile둜 λ³€ν™˜λ©λ‹ˆλ‹€.

GNU의 ν—¬λ‘œ ν”„λ‘œκ·Έλž¨μ€ GNU νˆ΄μ²΄μΈμ„ μ΄ν•΄ν•˜κΈ°μœ„ν•œ 쒋은 본보기 역할을 – 그리고 맀뉴얼 autotoolsλ₯Ό λ¬Έμ„œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


λ‹΅λ³€

사이먼! λ‚˜λŠ” 당신이 μ–΄λ–»κ²Œ λŠλΌλŠ”μ§€ μ•Œκ³ μžˆλ‹€; λ‚˜λŠ” λ¦¬λˆ…μŠ€λ₯Ό λ°°μš°λŠ”μ΄ 뢀뢄에도 어렀움을 κ²ͺμ—ˆλ‹€. λ‚΄ μžμ‹ μ˜ κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ, λ‚˜λŠ” 당신이 λ‹€λ£¨λŠ” λͺ‡ 가지 ν•­λͺ© (주둜 λ‚˜ μžμ‹ μ„μœ„ν•œ μ°Έκ³  자료!)에 λŒ€ν•œ μžμŠ΅μ„œλ₯Ό μΌμŠ΅λ‹ˆλ‹€ : http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . κ°„λ‹¨ν•œ Python μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œ / μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•œ λ‚΄ μ˜κ²¬μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. πŸ™‚

이것이 λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€! 그리고 ν–‰λ³΅ν•œ 컴파일.

νŒ€ 쑴슀


Ubuntu Linuxμ—μ„œ μ†ŒμŠ€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ / μ„€μΉ˜

μš°λΆ„νˆ¬ λ¦¬ν¬μ§€ν† λ¦¬λŠ” ν›Œλ₯­ν•œ μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ 가득 μ°¨ μžˆμ§€λ§Œ 리포지토리에 μ—†κ±°λ‚˜ (λ°λΉ„μ•ˆ νŒ¨ν‚€μ§€κ°€μ—†λŠ”) β€œν•„μˆ˜ 도ꡬ”λ₯Ό λ§Œλ‚˜μ•Όν•©λ‹ˆλ‹€. 리포지토리보닀 μ΅œμ‹  λ²„μ „μž…λ‹ˆλ‹€. λ„ˆ λ­ν•˜λ‹ˆ? 음, μ†ŒμŠ€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•΄μ•Όν•©λ‹ˆλ‹€! κ±±μ •ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. μ†Œλ¦¬μ²˜λŸΌ λ³΅μž‘ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 랭크 μ•„λ§ˆμΆ”μ–΄κ°€ 된 κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ ν•œ λͺ‡ 가지 팁이 μžˆμŠ΅λ‹ˆλ‹€! (이 μ˜ˆμ œμ—μ„œ Ubuntuλ₯Ό μ‚¬μš©ν•˜λŠ” λ™μ•ˆ 일반적인 κ°œλ…μ€ Fedora와 같은 λŒ€λΆ€λΆ„μ˜ Unix / Linux 배포판 및 Windows의 Cygwin ν”Œλž«νΌμ—λ„ 적용 ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.)

μ†ŒμŠ€μ—μ„œ λŒ€λΆ€λΆ„μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œ (컴파일)ν•˜λŠ” κΈ°λ³Έ ν”„λ‘œμ„ΈμŠ€λŠ” configure-> compile-> install μˆœμ„œλ₯Ό λ”°λ¦…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 일반적인 Unix / Linux λͺ…령은 config-> make-> make installμž…λ‹ˆλ‹€. κ²½μš°μ— 따라 λͺ¨λ“  λͺ…령을 단일 λͺ…λ ΉμœΌλ‘œ κ²°ν•© ν•  수 μžˆμŒμ„ λ³΄μ—¬μ£ΌλŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό 찾을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

$ config && make && make install

물둠이 λͺ…령은 μ΄λŸ¬ν•œ 단계 쀑 아무 λ¬Έμ œκ°€ μ—†λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. μ—¬κΈ°κ°€ μž¬λ―Έκ°€ μ˜¨λ‹€!

μ‹œμž‘ν•˜κΈ°

이전에 μ‹œμŠ€ν…œμ˜ μ†ŒμŠ€μ—μ„œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ»΄νŒŒμΌν•˜μ§€ μ•Šμ€ 경우 gcc컴파일러 μŠ€μœ„νŠΈ 와 같은 일반적인 개발 도ꡬ , 일뢀 곡톡 헀더 파일 (이미 μž‘μ„±λœ μ½”λ“œλ‘œ 생각 ν•˜μ‹­μ‹œμ˜€)을 μ‚¬μš©ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„€μ •ν•΄μ•Όν•©λ‹ˆλ‹€ μ„€μΉ˜μ€‘μΈ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ μ‚¬λžŒ 및 make 도ꡬ) λ‹€ν–‰νžˆ μš°λΆ„νˆ¬μ—λŠ” build-essential이것을 μ„€μΉ˜ν•  메타 νŒ¨ν‚€μ§€ κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ„€μΉ˜ν•˜λ €λ©΄ (λ˜λŠ” 이미 가지고 μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€!) ν„°λ―Έλ„μ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

$ sudo apt-get install build-essential

κΈ°λ³Έ 섀정이 μ™„λ£Œλ˜μ—ˆμœΌλ―€λ‘œ μ‘μš© ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ β€œν™ˆβ€λ””λ ‰ν† λ¦¬μ™€ 같은 읽기 / μ“°κΈ° κΆŒν•œμ΄μžˆλŠ” 디렉토리에 μ €μž₯ν•˜μ‹­μ‹œμ˜€. 일반적으둜 파일 ν™•μž₯μžλŠ” .tar.gzλ˜λŠ” 둜 μ•„μΉ΄μ΄λΈŒ νŒŒμΌμ— μžˆμŠ΅λ‹ˆλ‹€ .tar.bz2. λŠ” .tarλ‹¨μˆœνžˆ μƒλŒ€ 디렉토리 ꡬ쑰λ₯Ό 보쑴 파일의 κ·Έλ£Ή 인 β€œν…Œμ΄ν”„ μ•„μΉ΄μ΄λΈŒβ€μ˜ 것을 μ˜λ―Έν•œλ‹€. .gz널리 μ‚¬μš©λ˜λŠ” Unix / Linux μ••μΆ• ν˜•μ‹ 인 gzip (GNU zip) 의 μ•½μžμž…λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ .bz2bzip2 의 μ•½μ–΄λ‘œ gzip보닀 더 높은 μ••μΆ• (μž‘μ€ μ••μΆ• 파일 크기)을 μ œκ³΅ν•˜λŠ” μƒˆλ‘œμš΄ μ••μΆ• ν˜•μ‹μž…λ‹ˆλ‹€.

μ†ŒμŠ€ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν•œ ν›„ 터미널 μ°½ (Ubuntu λ©”λ‰΄μ˜ μ‹œμŠ€ν…œ 터미널)을 μ—΄κ³  νŒŒμΌμ„ μ €μž₯ ν•œ λ””λ ‰ν† λ¦¬λ‘œ λ³€κ²½ν•˜μ‹­μ‹œμ˜€. ( ~/download이 μ˜ˆμ œμ—μ„œ μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€ . μ—¬κΈ°μ—μ„œ β€˜~β€™λŠ” β€œhomeβ€λ””λ ‰ν† λ¦¬μ˜ λ°”λ‘œ κ°€κΈ°μž…λ‹ˆλ‹€.) tar λͺ…령을 μ‚¬μš©ν•˜μ—¬ λ‹€μš΄λ‘œλ“œ ν•œ μ•„μΉ΄μ΄λΈŒ νŒŒμΌμ—μ„œ νŒŒμΌμ„ μΆ”μΆœν•˜μ‹­μ‹œμ˜€.

파일이 gzip μ•„μΉ΄μ΄λΈŒ 인 경우 (예 :둜 끝남 .tar.gz) λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

            $ tar -zxvf filename.tar.gz

파일이 bzip2 μ•„μΉ΄μ΄λΈŒ 인 경우 (예 :둜 끝남 .tar.bz2) λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

            $ tar -jxvf filename.tar.gz

팁 : μ•„μΉ΄μ΄λΈŒλ₯Ό μΆ”μΆœν•˜κΈ° μœ„ν•΄ λͺ¨λ“  λͺ…λ Ή ν–‰ μŠ€μœ„μΉ˜λ₯Ό κΈ°μ–΅ν•˜μ§€ μ•ŠμœΌλ €λ©΄ dtrx (λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” 것!) λ˜λŠ” deco (더 μΈκΈ°μžˆλŠ”) μœ ν‹Έλ¦¬ν‹° 쀑 ν•˜λ‚˜ (λ˜λŠ” β€‹β€‹λ‘˜ λ‹€)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 이 μœ ν‹Έλ¦¬ν‹° 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μœ ν‹Έλ¦¬ν‹° 이름 (dtrx λ˜λŠ” deco)κ³Ό 파일 이름 만 μž…λ ₯ν•˜λ©΄ λ‚˜λ¨Έμ§€λŠ” λͺ¨λ‘ μˆ˜ν–‰λ©λ‹ˆλ‹€. 이 두 가지 λͺ¨λ‘ μ‹€ν–‰ κ°€λŠ₯ν•œ λŒ€λΆ€λΆ„μ˜ μ•„μΉ΄μ΄λΈŒ ν˜•μ‹μ„ μ²˜λ¦¬ν•˜λŠ” 방법을 β€œμ•Œκ³ β€ν° 였λ₯˜ 처리 κΈ°λŠ₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

μ†ŒμŠ€μ—μ„œ λΉŒλ“œ ν•  λ•Œ λ°œμƒν•  μˆ˜μžˆλŠ” 두 가지 일반적인 μœ ν˜•μ˜ 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  1. ꡬ성 슀크립트 (일반적으둜 config λ˜λŠ” configure)λ₯Ό μ‹€ν–‰ν•˜μ—¬ μ„€μ •κ³Ό κ΄€λ ¨λœ make νŒŒμΌμ„ λ§Œλ“€ λ•Œ ꡬ성 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
  2. make 파일이 생성 된 ν›„ make λͺ…령을 μ‹€ν–‰ν•  λ•Œ 컴파일러 였λ₯˜κ°€ λ°œμƒν•˜κ³  μ»΄νŒŒμΌλŸ¬κ°€ ν•„μš”ν•œ 일뢀 μ½”λ“œλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

이듀 각각을 μ‚΄νŽ΄λ³΄κ³ μ΄λ₯Ό ν•΄κ²°ν•˜λŠ” 방법에 λŒ€ν•΄ λ…Όμ˜ ν•  κ²ƒμž…λ‹ˆλ‹€.

ꡬ성 및 ꡬ성 였λ₯˜

μ†ŒμŠ€ μ½”λ“œ μ•„μΉ΄μ΄λΈŒ νŒŒμΌμ„ μΆ”μΆœν•œ ν›„ ν„°λ―Έλ„μ—μ„œ μΆ”μΆœ 된 파일이 포함 된 λ””λ ‰ν† λ¦¬λ‘œ λ³€κ²½ν•΄μ•Όν•©λ‹ˆλ‹€. 일반적으둜이 디렉토리 이름은 파일 이름과 동일 .tar.gzν•˜κ±°λ‚˜ .tar.bz2ν™•μž₯μžκ°€ μ—†μŠ΅λ‹ˆλ‹€ . κ·ΈλŸ¬λ‚˜ λ•Œλ•Œλ‘œ 디렉토리 이름은 버전 μ •λ³΄κ°€μ—†λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 이름 μΌλΏμž…λ‹ˆλ‹€.

μ†ŒμŠ€ λ””λ ‰ν† λ¦¬μ—μ„œ README파일 및 / λ˜λŠ” INSTALL파일 (λ˜λŠ” μœ μ‚¬ν•œ 이름을 가진 것)을 μ°ΎμœΌμ‹­μ‹œμ˜€ . μ΄λŸ¬ν•œ νŒŒμΌμ—λŠ” 일반적으둜 쒅속성에 λŒ€ν•œ 정보λ₯Ό ν¬ν•¨ν•˜μ—¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œ / μ»΄νŒŒμΌν•˜κ³  μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•œ μœ μš©ν•œ 정보가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. β€œμ’…μ†μ„±β€μ€ μ„±κ³΅μ μœΌλ‘œ μ»΄νŒŒμΌν•˜λŠ” 데 ν•„μš”ν•œ λ‹€λ₯Έ ꡬ성 μš”μ†Œ λ‚˜ 라이브러리의 μ΄λ¦„μž…λ‹ˆλ‹€.

당신이 읽은 ν›„ README및 / λ˜λŠ” INSTALLνŒŒμΌμ„ (그리고, 희망 μ‘μš© ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ λͺ¨λ“  κ΄€λ ¨ 온라인 λ¬Έμ„œ λ³΄μ•˜λ‹€), 파일 이름 (νŒŒμΌμ— μ„€μ •λœ β€œXβ€κΆŒν•œμ΄) μ‹€ν–‰ νŒŒμΌμ„ μ°Ύμ•„ configλ‚˜ configure. λ•Œλ•Œλ‘œ 파일의 ν™•μž₯μžλŠ” .sh(예 πŸ™‚ 일 수 config.shμžˆμŠ΅λ‹ˆλ‹€. 일반적으둜 μ»΄νŒŒμΌμ„μœ„ν•œ β€œμ •μƒμ μΈβ€ν™˜κ²½μ΄ μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ μœ ν‹Έλ¦¬ν‹°λ₯Ό μ‹€ν–‰ν•˜λŠ” μ‰˜ μŠ€ν¬λ¦½νŠΈμž…λ‹ˆλ‹€. 즉, ν•„μš”ν•œ λͺ¨λ“  것이 μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

팁 : 이것이 ꡬ성 파일 λŒ€μ‹  Python 기반 μ‘μš© ν”„λ‘œκ·Έλž¨ 인 κ²½μš°μ΄λΌλŠ” νŒŒμΌμ„ μ°Ύμ•„μ•Όν•©λ‹ˆλ‹€ setup.py. 파이썬 μ‘μš© ν”„λ‘œκ·Έλž¨μ€ 일반적으둜 μ„€μΉ˜κ°€ 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€. 이 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ 루트둜 μ„€μΉ˜ν•˜λ €λ©΄ (예 : Ubuntuμ—μ„œ λ‹€μŒ λͺ…λ Ή μ•žμ— sudoλ₯Ό μž…λ ₯)이 λͺ…령을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

    $ python setup.py install

그게 당신이해야 ν•  λͺ¨λ“  κ²ƒμž…λ‹ˆλ‹€. 이 μžμŠ΅μ„œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 κ±΄λ„ˆ λ›°κ³  μ‘μš© ν”„λ‘œκ·Έλž¨ μ‚¬μš© 및 즐기기둜 직접 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν„°λ―Έλ„μ—μ„œ ꡬ성 슀크립트λ₯Ό μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. 일반적으둜 일반 μ‚¬μš©μž κ³„μ •μœΌλ‘œ ꡬ성 슀크립트λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

$ ./config

μŠ€ν¬λ¦½νŠΈλŠ” 일뢀 λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜μ—¬ μŠ€ν¬λ¦½νŠΈκ°€ μˆ˜ν–‰μ€‘μΈ μž‘μ—…μ— λŒ€ν•œ 아이디어λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μŠ€ν¬λ¦½νŠΈλŠ” 성곡 μ—¬λΆ€λ₯Ό ν‘œμ‹œν•˜κ³  μ‹€νŒ¨ν•œ 경우 μ‹€νŒ¨ 원인에 λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 였λ₯˜ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμœΌλ©΄ 일반적으둜 λͺ¨λ“  것이 μ œλŒ€λ‘œλ˜μ—ˆλ‹€κ³  κ°€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ꡬ성 슀크립트처럼 λ³΄μ΄λŠ” 슀크립트λ₯Ό 찾지 λͺ»ν•˜λ©΄ 일반적으둜 μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 맀우 λ‹¨μˆœν•˜κ³  ν”Œλž«νΌμ— λ…λ¦½μ μ΄λΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 제곡된 Makefileμ‹œμŠ€ν…œμ€ λͺ¨λ“  μ‹œμŠ€ν…œμ—μ„œ μž‘λ™ ν•˜λ―€λ‘œ μ•„λž˜μ˜ λΉŒλ“œ / 컴파일 λ‹¨κ³„λ‘œ κ±΄λ„ˆ λ›Έ 수 μžˆμŠ΅λ‹ˆλ‹€ .

예

이 ν•™μŠ΅μ„œμ—μ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œμ‹œ λ°œμƒν•  μˆ˜μžˆλŠ” 였λ₯˜ μœ ν˜•μ˜ 예둜 NewsbeuterλΌλŠ” ν…μŠ€νŠΈ 기반 RSS 리더λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. Newsbeuter의 경우 ꡬ성 슀크립트 μ΄λ¦„μ€μž…λ‹ˆλ‹€ config.sh. λ‚΄ μ‹œμŠ€ν…œμ—μ„œμ„ μ‹€ν–‰ν•  λ•Œ config.shλ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found

You need package sqlite3 in order to compile this program.
Please make sure it is installed.

μ•½κ°„μ˜ 연ꡬλ₯Ό ν•œ κ²°κ³Ό, μ‹€μ œλ‘œ sqlite3μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ„€μΉ˜λ˜μ–΄ μžˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€ . κ·ΈλŸ¬λ‚˜ μ†ŒμŠ€μ—μ„œ λΉŒλ“œν•˜λ €κ³ ν•˜λ―€λ‘œ config.shμ‹€μ œλ‘œ μ°Ύκ³ μžˆλŠ” 것은에 λŒ€ν•œ 개발 라이브러리 (헀더)μž…λ‹ˆλ‹€ sqlite3. μš°λΆ„νˆ¬μ—μ„œ λŒ€λΆ€λΆ„μ˜ νŒ¨ν‚€μ§€μ—λŠ”λ‘œ λλ‚˜λŠ” κ΄€λ ¨ 개발 λŒ€μ‘ νŒ¨ν‚€μ§€κ°€ -devμžˆμŠ΅λ‹ˆλ‹€. Fedora와 같은 λ‹€λ₯Έ ν”Œλž«νΌμ€ μ’…μ’… -devel개발 νŒ¨ν‚€μ§€ 의 νŒ¨ν‚€μ§€ 접미사λ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€.

sqlite3개발 νŒ¨ν‚€μ§€μ— μ ν•©ν•œ νŒ¨ν‚€μ§€λ₯Ό 찾으렀면 apt-cacheUbuntu 의 μœ ν‹Έλ¦¬ν‹° (및 λ§ˆμ°¬κ°€μ§€λ‘œ yumFedora 의 μœ ν‹Έλ¦¬ν‹°)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite

이 λͺ…령은 μƒλ‹Ήνžˆ 큰 κ²°κ³Ό λͺ©λ‘μ„ λ°˜ν™˜ν•˜λ―€λ‘œ μ μ ˆν•œ νŒ¨ν‚€μ§€λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ μ•½κ°„μ˜ 탐정 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€. 이 경우 μ μ ˆν•œ νŒ¨ν‚€μ§€λŠ” libsqlite3-devμž…λ‹ˆλ‹€. λ•Œλ‘œλŠ” μš°λ¦¬κ°€ μ°Ύκ³ μžˆλŠ” νŒ¨ν‚€μ§€ lib에 λ™μΌν•œ νŒ¨ν‚€μ§€ 이름 plus λŒ€μ‹  접두사가 λΆ™μŠ΅λ‹ˆλ‹€ -dev. λ•Œλ‘œλŠ” μ—¬λŸ¬ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  μˆ˜μžˆλŠ” 곡유 라이브러리λ₯Ό μ°Ύκ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ„€μΉ˜ν•˜λ €λ©΄ libsqlite3-devν„°λ―Έλ„μ—μ„œ 일반적인 apt-get install λͺ…령을 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev

이제이 config.sh쒅속성 문제λ₯Ό ν•΄κ²°ν•˜κ³  더 이상 쒅속성 λ¬Έμ œκ°€ μ—†λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λ‹€μ‹œ μ‹€ν–‰ ν•΄μ•Όν•©λ‹ˆλ‹€. (여기에 ν‘œμ‹œν•˜μ§€ μ•Šμ§€λ§Œ Newsbeuter의 경우 libcurl4-openssl-devνŒ¨ν‚€μ§€ 도 μ„€μΉ˜ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€ .) λ˜ν•œ 개발 νŒ¨ν‚€μ§€ (예 :)λ₯Ό μ„€μΉ˜ libsqlite3-devν•˜κ³  κ΄€λ ¨ μ‘μš© ν”„λ‘œκ·Έλž¨ νŒ¨ν‚€μ§€ (예 :)λŠ” μ„€μΉ˜ sqlite3ν•˜μ§€ μ•Šμ€ 경우 이미 μ„€μΉ˜λ˜μ–΄ 있으면 λŒ€λΆ€λΆ„μ˜ μ‹œμŠ€ν…œμ€ κ΄€λ ¨ μ‘μš© ν”„λ‘œκ·Έλž¨ νŒ¨ν‚€μ§€λ₯Ό μžλ™μœΌλ‘œ λ™μ‹œμ— μ„€μΉ˜ν•©λ‹ˆλ‹€.

ꡬ성이 μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄ ν•˜λ‚˜ μ΄μƒμ˜ make 파일이 μž‘μ„±λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ νŒŒμΌμ€ 일반적으둜 이름이 μ§€μ •λ©λ‹ˆλ‹€ Makefile(파일 이름 λŒ€μ†Œ λ¬ΈμžλŠ” Unix / Linuxμ—μ„œ μ€‘μš”ν•©λ‹ˆλ‹€!). λΉŒλ“œ νŒ¨ν‚€μ§€ src에 λ“±μ˜ ν•˜μœ„ 디렉토리가 포함 된 Makefile경우 각 ν•˜μœ„ 디렉토리 에도.

λΉŒλ“œ 및 컴파일 였λ₯˜

이제 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€μ œλ‘œ 컴파일 ν•  μ€€λΉ„κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이것을 μ’…μ’… κ±΄λ¬Όμ΄λΌκ³ ν•˜λ©° 이름은 μ‹€μ œ ꡬ성 κ³Όμ •μ—μ„œ μ°¨μš©λ©λ‹ˆλ‹€. 일반적으둜 μ—¬λŸ¬ μ†ŒμŠ€ μ½”λ“œ 파일 인 μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ λ‹€μ–‘ν•œ β€œν”ΌμŠ€β€κ°€ κ²°ν•©λ˜μ–΄ 전체 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€. make μœ ν‹Έλ¦¬ν‹°λŠ” λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‹€μ œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ 컴파일러 및 링컀와 같은 λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 ꡬ성을 μ‹€ν–‰ ν•œ λ””λ ‰ν† λ¦¬μ—μ„œ make (일반 μ‚¬μš©μž κ³„μ •μœΌλ‘œ)λ₯Ό μ‹€ν–‰ν•˜κΈ° λ§Œν•˜λ©΄λ©λ‹ˆλ‹€. (Qt 라이브러리둜 μž‘μ„±λœ μ‘μš© ν”„λ‘œκ·Έλž¨ 컴파일과 같은 일뢀 κ²½μš°μ—λŠ” qmake와 같은 λ‹€λ₯Έ β€œλž˜νΌβ€μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λŒ€μ‹  μ‹€ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš© 은 항상 README및 / λ˜λŠ” INSTALLλ¬Έμ„œλ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.)

μœ„μ˜ ꡬ성 μŠ€ν¬λ¦½νŠΈμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ ν„°λ―Έλ„μ—μ„œ make (λ˜λŠ” μœ μ‚¬ν•œ μœ ν‹Έλ¦¬ν‹°)λ₯Ό μ‹€ν–‰ν•˜λ©΄ 싀행쀑인 λ‚΄μš©κ³Ό κ²½κ³  및 였λ₯˜μ— λŒ€ν•œ 일뢀 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. 일반적으둜 κ²½κ³ λŠ” 주둜 μ‘μš© ν”„λ‘œκ·Έλž¨ 개발자λ₯Όμœ„ν•œ 것이며 μœ„λ°˜λ˜λŠ” ν‘œμ€€ 사둀가 μžˆλ‹€λŠ” κ²½κ³ λ₯Ό λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일반적으둜 μ΄λŸ¬ν•œ κ²½κ³ λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ κΈ°λŠ₯에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜λ©΄μ— 컴파일러 였λ₯˜λ₯Ό μ²˜λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€. Newsbeuterλ₯Ό μ‚¬μš©ν•˜μ—¬ makeλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ ν•œλ™μ•ˆ λ¬Έμ œκ°€ μ—†μ—ˆμ§€λ§Œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1

첫 번째 였λ₯˜κ°€ λ°œμƒν•˜μžλ§ˆμž make ν”„λ‘œμ„ΈμŠ€κ°€ μ€‘μ§€λ©λ‹ˆλ‹€. 컴파일러 였λ₯˜ μ²˜λ¦¬λŠ” λ•Œλ‘œλŠ” κΉŒλ‹€λ‘œμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œμ— λŒ€ν•œ λ‹¨μ„œμ˜ 였λ₯˜λ₯Ό μ‚΄νŽ΄ λ΄μ•Όν•©λ‹ˆλ‹€. 일반적으둜 λ¬Έμ œλŠ” ν™•μž₯λͺ…이 보톡 .hλ˜λŠ” .hpp인 일뢀 헀더 파일 이 λˆ„λ½ 된 κ²ƒμž…λ‹ˆλ‹€. μœ„μ˜ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ stfl.h헀더 νŒŒμΌμ„ 찾을 수 μ—†λ‹€λŠ” λ¬Έμ œκ°€ λΆ„λͺ…ν•©λ‹ˆλ‹€ . 이 μ˜ˆμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ 였λ₯˜ λ©”μ‹œμ§€μ˜ 첫 번째 쀄을보고 문제의 κ·Όλ³Έ 원인을 μ°ΎκΈ° μœ„ν•΄ λ…Έλ ₯ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

Newsbeuter λ¬Έμ„œλ₯Ό μ‚΄νŽ΄λ³Έ ν›„ (μ‹œμž‘ν•˜κΈ° 전에 μˆ˜ν–‰ν•΄μ•Όν–ˆμ§€λ§Œ νŠœν† λ¦¬μ–Ό 의이 λΆ€λΆ„μ€λ³„λ‘œ μ˜λ―Έκ°€ μ—†μŠ΅λ‹ˆλ‹€!) STFLμ΄λΌλŠ” 타사 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•„μš”ν•˜λ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. 이 경우 μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? κΈ€μŽ„, μš°λ¦¬λŠ” 본질적으둜 ν•„μš”ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄ μ •ν™•νžˆ λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°˜λ³΅ν•©λ‹ˆλ‹€. 라이브러리λ₯Ό μ–»κ³  λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄ configure-build-install ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ ν•œ λ‹€μŒ μ›ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ λΉŒλ“œλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜μ‹­μ‹œμ˜€. 예λ₯Ό λ“€μ–΄ STFL의 경우 libncursesw5-devμ œλŒ€λ‘œ λΉŒλ“œν•˜λ €λ©΄ νŒ¨ν‚€μ§€ λ₯Ό μ„€μΉ˜ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€ . (보톡, λ‹€λ₯Έ ν•„μˆ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ ν•œ ν›„ μ›λž˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ ꡬ성 단계λ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•  ν•„μš”λŠ” μ—†μ§€λ§Œ κ²°μ½” 아프지 μ•ŠμŠ΅λ‹ˆλ‹€.)

STFL νˆ΄ν‚·μ„ μ„±κ³΅μ μœΌλ‘œ μ„€μΉ˜ ν•œ ν›„ Newsbeuter의 μž‘μ„± ν”„λ‘œμ„ΈμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. make ν”„λ‘œμ„ΈμŠ€λŠ” 일반적으둜 였λ₯˜κ°€ λ°œμƒν•œ μ§€μ μ—μ„œ λ²—μ–΄λ‚©λ‹ˆλ‹€. λ”°λΌμ„œ 이미 μ„±κ³΅μ μœΌλ‘œ 컴파일 된 νŒŒμΌμ€ λ‹€μ‹œ μ»΄νŒŒμΌλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λͺ¨λ“  것을 λ‹€μ‹œ μ»΄νŒŒμΌν•˜λ €λ©΄ make clean all을 μ‹€ν–‰ν•˜μ—¬ 컴파일 된 객체λ₯Ό μ œκ±°ν•œ λ‹€μŒ makeλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„€μΉ˜

λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλ˜λ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 파일 μ‹œμŠ€ν…œμ˜ 곡톡 μ˜μ—­ (예 : /usr/binλ˜λŠ” /usr/share/binλ“±)에 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ„€μΉ˜ν•˜λ €λ©΄ 루트둜 μ„€μΉ˜λ₯Ό μ‹€ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€. μ„€μΉ˜λŠ” 전체 ν”„λ‘œμ„ΈμŠ€μ—μ„œ κ°€μž₯ κ°„λ‹¨ν•œ λ‹¨κ³„μž…λ‹ˆλ‹€. μ„€μΉ˜ν•˜λ €λ©΄ ν„°λ―Έλ„μ—μ„œ λ‹€μŒμ„ μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€.

$ make install

이 ν”„λ‘œμ„ΈμŠ€μ˜ 좜λ ₯μ—μ„œ β€‹β€‹μ˜€λ₯˜κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. λͺ¨λ“  것이 μ„±κ³΅ν•˜λ©΄ ν„°λ―Έλ„μ—μ„œ λͺ…λ Ή 이름을 μ‹€ν–‰ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. (GUI μ‘μš© ν”„λ‘œκ·Έλž¨μ΄κ±°λ‚˜ μ‘μš© ν”„λ‘œκ·Έλž¨ 싀행이 끝날 λ•ŒκΉŒμ§€ 터미널 μ„Έμ…˜μ„ μ‚¬μš©ν•  μˆ˜μ—†λŠ” 경우 λͺ…λ Ή μ€„μ˜ 끝에 & 끝에 μΆ”κ°€ν•˜μ‹­μ‹œμ˜€.)

μ†ŒμŠ€μ—μ„œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œ ν•  λ•Œ 일반적으둜 Ubuntu의 GUI 메뉴에 μ•„μ΄μ½˜μ΄λ‚˜ λ°”λ‘œ κ°€κΈ°λ₯Ό μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것을 μˆ˜λ™μœΌλ‘œ μΆ”κ°€ν•΄μ•Όν•©λ‹ˆλ‹€.

그리고 그것은 기본적으둜 μš°λΆ„νˆ¬μ˜ μ†ŒμŠ€μ—μ„œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œν•˜κ³  μ„€μΉ˜ν•˜λŠ” 잠재적 인 λ°˜λ³΅μ μ΄μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. 이 μž‘μ—…μ„ λͺ‡ 번만 μˆ˜ν–‰ν•˜λ©΄ 두 번째 μžμ—°μ΄λ©λ‹ˆλ‹€!


λ‹΅λ³€

./configure –helpλŠ” GNU autotoolsκ°€ 생성 ν•œ ꡬ성 νŒŒμΌμ— λŒ€ν•΄ λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜μ§€ μ•Šκ³  –with /-둜 μ œκ³΅λ©λ‹ˆλ‹€ (라이브러리λ₯Ό 찾을 μœ„μΉ˜λ₯Ό λ§ν•˜κΈ° μœ„ν•΄ β€œκ³΅μœ β€μ™€ 같은 μΆ”κ°€ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 있음).

λ‹€λ₯Έ μ€‘μš”ν•œ 것듀은 –prefix (기본적으둜 / usr / local / λŒ€λΆ€λΆ„μ˜ 경우) μ„€μΉ˜ μœ„μΉ˜λ₯Ό λ§ν•΄μ€λ‹ˆλ‹€ (νŒ¨ν‚€μ§€λ₯Ό λΉŒλ“œν•˜λŠ” 경우 일반적으둜 –prefix = / usr λ˜λŠ” –prefix = / opt / YourPackage).

Linuxμ—μ„œ / lib, / usr / lib 및 / usr / local / libλŠ” 일반적으둜 λ‚΄ gccμ—μ„œ κ²€μƒ‰λ˜λ©° ldconfig의 κΈ°λ³Έ ꡬ성에 ν¬ν•¨λ©λ‹ˆλ‹€. μ •λ‹Ήν•œ μ΄μœ κ°€μ—†λŠ” ν•œ, μ—¬κΈ°κ°€ λ„μ„œκ΄€μ„ μ›ν•˜λŠ” κ³³μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ /etc/ld.so.confλŠ” μΆ”κ°€ ν•­λͺ©μ„ λ‚˜μ—΄ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β€œgcc -l”을 μ‹€ν–‰ν•˜κ³  였λ₯˜κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ κ΅¬μ„±ν•˜κ³  찾을 수 μžˆμŠ΅λ‹ˆλ‹€. CFLAGS 맀개 λ³€μˆ˜μ— β€œ-L”을 μΆ”κ°€ν•˜μ—¬ 검색 ν•  경둜λ₯Ό μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬ 버전을 μ„€μΉ˜ν•  수 있으며, 이전 버전과 μ—°κ²°λœ μ†Œν”„νŠΈμ›¨μ–΄λŠ” 링크 된 μƒνƒœλ‘œ μœ μ§€λ˜μ§€λ§Œ (lddλ₯Ό μ‹€ν–‰ν•˜μ—¬ Linuxμ—μ„œ 바인딩을 찾음) μƒˆ μ»΄νŒŒμΌμ€ 일반적으둜 μ‹œμŠ€ν…œμ—μ„œ μ΅œμ‹  λ²„μ „μ˜ 동적 라이브러리λ₯Ό λŒ€μƒμœΌλ‘œν•©λ‹ˆλ‹€.

λŒ€λΆ€λΆ„μ˜ μ†Œν”„νŠΈμ›¨μ–΄λŠ” 특히 libtool을 μ‚¬μš©ν•˜λŠ” 경우 동적 라이브러리λ₯Ό κ°€μ •ν•˜λ―€λ‘œ μ‚¬μ†Œν•˜μ§€ μ•Šμ€ 앱은 μ •μ μœΌλ‘œ μ˜¬λ°”λ₯΄κ²Œ λΉŒλ“œλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

ls -l은 μ„€μΉ˜λœ 라이브러리λ₯Ό μ°ΎλŠ” κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

그리고 그것이 λ‚΄κ°€ μ •λ³΄μ—μ„œ λ²—μ–΄λ‚œ κ³³μž…λ‹ˆλ‹€. νŒ¨ν‚€μ§€λ₯Ό 잘 μ‚¬μš©ν•˜λŠ” 방법 : λͺ¨λ¦„ κ°€λŠ₯ν•œ 경우 문제λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄ 물건을 포μž₯으둜 포μž₯ν•˜λ €κ³ ν•©λ‹ˆλ‹€.


λ‹΅λ³€

β€œ./configure에 전달할 인수λ₯Ό μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?”

일반적으둜 ./configure –helpλŠ” μ›ν•˜λŠ” 것을 μ•Œλ €μ€λ‹ˆλ‹€.

β€œμ„€μΉ˜ ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 버전을 μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?”

μ‹œμŠ€ν…œμ— 따라 λ‹€λ¦…λ‹ˆλ‹€. ν•œ 가지 방법은 find /|grep libname|less일반적으둜 라이브러리 파일이 파일 μ΄λ¦„μ˜ 버전을 κ°–λŠ” κ²ƒμ²˜λŸΌ μˆ˜ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

β€œμΌλ°˜ μ‹œμŠ€ν…œμ„ μ†μƒμ‹œν‚€μ§€ μ•Šκ³  μ—¬λŸ¬ λ²„μ „μ˜ 라이브러리λ₯Ό μ–΄λ–»κ²Œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?”

λ‹€μ‹œ ν•œ 번 μ‹œμŠ€ν…œκ³Ό λΌμ΄λΈŒλŸ¬λ¦¬μ— 따라 λ‹€λ¦…λ‹ˆλ‹€. sudo make altinstall당신을 μœ„ν•΄ 버전 이름을 λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€. 라이브러리 νŒŒμΌμ€ 일반적으둜 자체 λ²„μ „μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ…μ‹¬ν•˜μ‹­μ‹œμ˜€. 버전은 μ’…μ’… β€œμ •κ·œν™” λœβ€μ΄λ¦„μ— λŒ€ν•œ 심볼릭 링크λ₯Ό μƒμ„±ν•˜λ―€λ‘œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β€œνŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬λ˜λŠ” μ‹œμŠ€ν…œμ— μ†ŒμŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” 것을 μ„€μΉ˜ν•˜λŠ” 경우 κ°€μž₯ κΉ¨λ—ν•œ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?”

./configureμ—μ„œ –prefix 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³  μ–΄λ”˜κ°€μ— 배치 /optν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λ©΄μ±… μ‘°ν•­ : λ‚˜λŠ” κ²°μ½” μ „λ¬Έκ°€λŠ” μ•„λ‹ˆμ§€λ§Œ cmd 라인 (μŠ¬λž™μ›¨μ–΄, CentOS, redhat, μš°λΆ„νˆ¬, 기타 및 OS X) μ—μ„œ 5 λ…„ 이상 Linuxλ₯Ό μ‚¬μš©ν•΄ μ™”μŠ΅λ‹ˆλ‹€ .


λ‹΅λ³€

κ·€ν•˜μ˜ μ§ˆλ¬Έμ— μ•½κ°„μ˜ λŒ€λ‹΅μ„ν•˜κΈ° μœ„ν•΄ μ–Έμ  κ°€ μ„€μΉ˜ ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 버전을 ν™•μΈν•˜λŠ” 쒋은 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€ (Linux Debian에 μžˆμœΌλ―€λ‘œ λ‹€λ₯Έ λ²„μ „μ—μ„œλ„ μž‘λ™ν•©λ‹ˆλ‹€).

dpkg --list

λ‹€μŒκ³Ό 같은 좜λ ₯μ΄μžˆλŠ” κΈ΄ λͺ©λ‘μ„ κ°€μ Έμ™€μ•Όν•©λ‹ˆλ‹€.

ii  libssl0.9.8    0.9.8c-4etch5  SSL shared libraries
ii  libssp0        4.1.1-21       GCC stack smashing protection library
ii  libstdc++5     3.3.6-15       The GNU Standard C++ Library v3
ii  libstdc++5-3.3 3.3.6-15       The GNU Standard C++ Library v3 (development
ii  libstdc++6     4.1.1-21       The GNU Standard C++ Library v3

λ‹΅λ³€

사이먼,

1.) ./configure –helpλŠ” λ§Žμ€ μ–‘μ˜ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λ‚˜λŠ” 그것을 ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 일반적으둜 정적 / 동적 링크 라이브러리λ₯Ό 컴파일 ν•  μˆ˜μžˆλŠ” μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

2.) λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 동적 링컀 κ²½λ‘œμ— μžˆμŠ΅λ‹ˆλ‹€. 이것은 보톡 /etc/ld.so.conf에 μ„€μ •λ©λ‹ˆλ‹€. λ§μ»€λŠ” 처음 찾은 것과 μΌμΉ˜ν•˜λŠ” PATH ν™˜κ²½ λ³€μˆ˜μ™€ 같은 μ μ ˆν•œ 라이브러리λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.

3.) 일반적으둜 라이브러리 버전이 λ³€κ²½λ˜λ©΄ λͺ¨λ“  것을 λ‹€μ‹œ μ»΄νŒŒμΌν•΄μ•Όν•˜λ―€λ‘œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 일뢀 검색을 μˆ˜ν–‰ν•˜λ©΄ μ •μ μœΌλ‘œ μ—°κ²°ν•˜λŠ” 것이 쒋지 μ•Šμ€ μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” κ·Έλ ‡κ²Œ μ˜€λž«λ™μ•ˆ κ·Έκ²ƒμ„ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ •λ§λ‘œ μ—¬κΈ°μ—μ„œ μ„€λͺ… ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

4.) 이것은 μ•½κ°„ μ–΄λ ΅λ‹€. 라이브러리 κ²½λ‘œλŠ” λ°˜λ“œμ‹œ ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€. λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” 일반적으둜 μ„€μΉ˜λœ 버전에 λŒ€ν•œ 심볼릭 링크가 μžˆμŠ΅λ‹ˆλ‹€.

예 : libssh2.so.1-> libssh2.so.1.0.0

일반적으둜 μ‚¬λžŒλ“€μ€ μžμ‹ μ˜ λ°λΉ„μ•ˆ νŒ¨ν‚€μ§€λ₯Ό λ‘€λ§ν•˜κ±°λ‚˜ λ‹€λ₯Έ κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ‘œκ·Έλž¨μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€. λ‚˜λŠ” 맀우 κ°„λ‹¨ν•œ stow ( http://www.gnu.org/software/stow/ )λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜λœ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΄€λ¦¬ν•˜κ³  심볼릭 링크λ₯Ό μ‚¬μš©ν•˜μ—¬ 라이브러리λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. deb / rpm νŒ¨ν‚€μ§€λ₯Ό λΉŒλ“œ / μ„€μΉ˜ / ν…ŒμŠ€νŠΈ ν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 더 μ‰½μŠ΅λ‹ˆλ‹€.

5.) μ—¬λŸ¬ λ²„μ „μ˜ 라이브러리λ₯Ό 라이브러리 디렉토리에 μ •μƒμ μœΌλ‘œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€ν–‰ νŒŒμΌμ— μ—°κ²°λœ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ—°κ²°λœ 버전에 μ—°κ²°λœ μƒνƒœλ‘œ μœ μ§€λ©λ‹ˆλ‹€. μ‹€ν–‰ νŒŒμΌμ—μ„œ lddλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ‹€ν–‰ 파일이 μ—°κ²°λœ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

6.) μ•žμ„œ μ–ΈκΈ‰ ν•œ κ²ƒμ²˜λŸΌ, μžμ‹ μ˜ λ°λΉ„μ•ˆ 꾸러미λ₯Ό κ΅΄ λ¦¬κ±°λ‚˜ stowλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•„λ§ˆλ„ κ°€μž₯ κΉ¨λ—ν•œ ν•΄κ²°μ±… 일 κ²ƒμž…λ‹ˆλ‹€.

7.) λ‚˜λŠ” μ‹€μ œλ‘œ Mac OSXλ₯Ό 말할 μˆ˜λŠ” μ—†μ§€λ§Œ Linux의 경우 배포판의 νŒ¨ν‚€μ§• μ‹œμŠ€ν…œμ΄ κ°€μž₯ μ’‹μŠ΅λ‹ˆλ‹€.

8.) lddλ₯Ό μ‚¬μš©ν•˜κ³  μ–΄λ–€ 버전과 μ–΄λ–€ 버전이 μ—°κ²°λ˜μ–΄ μžˆλŠ”μ§€ λ˜λŠ” μ–΄λ–€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‹€ν–‰ 파일과 μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ€μ§€ μ•Œμ•„ λ‚΄λ©΄ λ§Žμ€ 쒌절이 ν•΄κ²° 될 κ²ƒμž…λ‹ˆλ‹€. pkg-configλŠ” 그것을 μ‚¬μš©ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ—λ§Œ 도움이 될 κ²ƒμž…λ‹ˆλ‹€. μš”μ¦˜ 인기가 μžˆμ§€λ§Œ κΈ°λ³Έ autotools λΉŒλ“œ μ‹œμŠ€ν…œμ˜ μΌλΆ€λŠ” μ•„λ‹™λ‹ˆλ‹€.