새로운 OS에 라이브러리 설치하기

현존하는 C 패러다임에서 라이브러리를 설치한다는 것은 적어도 (최소한) 다음 툴들이 각 라이브러리에 맞게 존재한다는 것

  • C compiler 혹은 C++ compiler : 이건 GCC 등으로 인해 상대적으로 잘 퍼져있고, 표준에 맞게만 짜면 상당히 포터블함 ((특히 C의 경우엔 Java보다 더 호환성있게 옮겨지는 경우를 왕왕 본다. 예를 들어 새 모바일 기기가 나올 때마다 포팅되는 Quake라거나….))
  • Linker (+ loader): 링커는 컴파일러 툴셋의 일부이긴하지만 상대적으로 OS에 의존적인 부분. OS마다 실행 파일 형태가 다르고 ((Win32만 해도 COM, PE, linux의 ELF, COFF, …)) 그에 따른 링커 동작도 변화한다

여튼 MacOS X에 자주 쓰는 라이브러리들을 몇 가지 설치했다. 그래도 *nix류라서 GCC가 정상적으로 도는 것 같고해서 별 어려움 없이 진행되긴 한듯. ((물론 구글에게 물어본게 있지만))

  • Boost — C++ 유저인 rein의 경우 boost는 빛임(…). toolset 만 darwin으로 잡아주면 문제 없이 설치된다. ((bjam -j2 –with-python-version=2.5 –toolset=darwin 으로 설치. toolset 없이 하면 GCC가 기본으로 잡혀서 링커 에러를 내더라…))
  • intel TBB — binary 배포판이 존재한다. 일단 그걸로 설치. 나중에 생각나면 빌드를 하던가 말던가(…)
  • UnitTest++ — 라이브러리를 빌드했는데 (.a 파일로 static 빌드됨), 링크가 안된다. 구글에게 물어보니 ranlib을 써서 TOC를 만들어줘야하는군… ((근데 내 기억이 맞다면 이거 그냥 index만 헤더에 만들어서 링킹만 조금 빠르게 해주는거 아닌가. 맥은 이거 없으면 링크 실패한다))

여튼 이런 과정을 통해서 라이브러리 설정 종료. 워크샵 준비도 슬금슬금 시작. 인증샷(?)

eclipse_on_leopard

ps. 자주 사용하는 라이브러리가 ANSI/ISO C++ 이고, 대부분의 OS의 경우에 최신 Compiler만 설치되어있어서 별 무리 없이 쓸 수 있다는 것은 참 좋은듯. Python에 비하면 불편하기야 하지만 잃는게 있어야 얻는게 있지…

그리고 boost::thread의 read/write mutex에 존재하던 문제는 1.35로 넘어오면서 해결된듯하다. 새로운 mutex 구현체 쪽으로 read/write mutex와 일부 타입이 typedef 으로 변경된 것을 확인했음

Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

6 Comments

  1. 어라 저 hash_t::const_accessor는 어디에 나오는 뭐하는 놈이에요?
    . 랑 -> 둘다 쓸수 있는건 첨 봤어요(… 라지만 맘먹고 오퍼레이터 만지면 다 되는건가… ㅡ_ㅡ;; )

  2. D.L / smart pointer나 iterator들 처럼 포인터의 추상화인 경우에는 대부분 저렇다고 생각해도 된다.

    -> 를 overload해서 wrapping하는 포인터의 연산들이 될 거고,
    . 는 smart pointer나 iterator 자체의 연산들이 되겠지. (결정적으로 . 는 overload가 안된다)

    ps. 저건 intel TBB에 들어있는 concurrent_hash_map 의 read/write 접근자(iterator랑 달리 traverse는 안됨) 다

Leave a Reply