it-swarm-ko.tech

Linux에서 OS X로 전환하는 소프트웨어 개발자는 무엇을해야합니까?

Ubuntu/Fedora/Red Hat/Suse를 사용했지만 OS X를 전혀 사용하지 않았습니다. OS X 사용을 정기적으로 시작해야한다면, 무엇을주의해야합니까?

내가 사용하는 도구는 GNU 도구 체인, C++/부스트 등)입니다.

51
grokus

나는 몇 년 전 같은 움직임을했다. 내가 겪은 것들은 다음과 같습니다.

  • 일반적인 데스크탑 리눅스는 OS X보다 풍부한 사용자 영역을 가지고 있습니다.

    당신은 아마 내가했던 것과 다른 도구를 놓칠 것이므로 교체 권장 사항에 대해 구체적으로 이해하는 것은 의미가 없습니다.

    대신 Fink , MacPorts 또는 Homebrew 를 먼저 설치하십시오. 이 시스템은 Linux 또는 BSD의 일반적인 패키지 관리 시스템을 제공합니다. 각각 고유 한 맛과 패키지 세트가 있으므로 취향과 요구에 따라 올바른 선택이 가능합니다.

    하나의 패키지 시스템에 필요한 모든 프로그램이있는 것은 아닙니다. 일부 프로그램은 아직 OS X로 포팅되지 않았으므로 any 패키지 시스템에 나타나지 않습니다. 그럼에도 불구하고,이 시스템은 OS X와 ​​함께 제공되는 것을 크게 확장하고 Linux에서 쉽게 전환 할 수 있습니다.

  • OS X 명령 행 컴파일러는 이제 기본적으로 64 비트 실행 파일을 빌드합니다.

    Leopard 및 이전 버전에서 컴파일러는 기본적으로 32 비트 실행 파일을 빌드했습니다. 여러 가지 방법으로 문제가 발생할 수 있습니다. 다시 빌드 할 수 없지만 링크해야하는 오래된 32 비트 라이브러리가 있거나 32 비트 모드로 시스템을 계속 실행 중일 수 있습니다.

    32 비트 빌드를 강제하는 한 가지 방법은 빌드 시스템에서 gcc 기본값을 gcc-4.0로 재정의하는 것입니다. 이는 기본 32 비트 레오파드 컴파일러입니다. (gcc는 Snow Leopard의 기본 64 비트 gcc-4.2에 대한 심볼릭 링크입니다.) autoconf 기반 빌드 시스템에서는 다음과 같이 작동합니다.

    $ ./configure CC=gcc-4.0 CXX=g++-4.0
    

    (프로그램에 C++ 구성 요소가 포함 된 경우 CXX 비트 만 필요합니다.)

    또 다른 방법은 -m32를 컴파일러와 링커에 전달하는 것입니다.

    $ ./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
    

    더 타이핑하지만 최신 GCC에서 32 비트 빌드를 얻을 수 있습니다.

  • 동적 연결은 크게 다릅니다.

    ld 명령을 직접 작성하면 그 습관을 깰 시간입니다. 대신 컴파일러를 통해 또는 libtool와 같은 중개자를 사용하여 프로그램과 라이브러리를 연결해야합니다. 이들은 플랫폼에 따라 달라지는 링크 방식의 차이를 처리하므로 휴대용 메커니즘으로 추상화 할 수없는 학습 프로그램의 두뇌 힘을 절약 할 수 있습니다.

    예를 들어 근육 메모리를 업데이트해야 someprogram이 (가) 연결된 라이브러리를 파악하려면 otool -L someprogram 대신 ldd someprogram를 입력해야합니다.

    처음에 당신의 두뇌를 뒤틀 게 할 동적 연결의 또 다른 차이점은 OS X에서 라이브러리의 설치 위치는 라이브러리 자체에서이고, 링커는 링크에서 실행 파일에 복사합니다. 시각. 즉, /usr/local/lib에 설치된 라이브러리에 링크했지만 실행 파일과 동일한 디렉토리에있는 사용자에게 라이브러리를 제공하려면 설치 프로세스의 일부로 다음과 같이 말해야합니다.

    $ cp /usr/local/lib/libfoo.dylib .
    $ install_name_tool -id @loader_path/libfoo.dylib libfoo.dylib
    $ make LDFLAGS=-L. relink
    

    이제 위의 많은 부분이 빌드 시스템에 따라 다를 수 있으므로 레시피가 아닌 예제로 사용하십시오. 이것이하는 일은 우리가 링크하는 라이브러리의 개인 복사본을 만들고 공유 라이브러리 식별자를 절대 경로에서 "실행 파일과 같은 디렉토리에있는"을 의미하는 상대 경로로 변경 한 다음이 수정 된 복사본에 대해 실행 파일을 강제로 다시 작성하는 것입니다 도서관의.

    install_name_tool가 핵심 명령입니다. 대신 실행 파일을 기준으로 ../lib 디렉토리에 라이브러리를 설치하려면 -id 인수가 @loader_path/../lib/libfoo.dylib 여야합니다.

    Joe Di Pol은 훨씬 자세하게 이것에 대한 좋은 기사 를 썼습니다.

  • 동적 연결 + 타사 패키지는 초기에 두통을 유발할 수 있습니다.

    라이브러리를 표준 위치에 설치하지 않은 타사 패키지의 라이브러리를 사용하려고 시도하는 즉시 동적 연결 문제가 발생할 수 있습니다. MacPorts 예를 들어 /opt/local/lib 또는 /usr/lib 대신 /usr/local/lib에 라이브러리를 설치하는 등의 작업을 수행합니다. 이 문제가 발생하면 .bash_profile에 다음과 같은 줄을 추가하면 문제를 해결할 수 있습니다.

    # Tell the dynamic linker (dyld) where to find MacPorts package libs
    export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
    
    # Add MacPorts header file install dirs to your gcc and g++ include paths
    export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
    
  • OS X는 Linux와 다른 CPU 호환성 문제를 처리합니다.

    어떤 이유로 든 32 비트를 지원해야하는 64 비트 Linux에서는 64 비트 버전이 lib64 디렉토리는 기존 lib 디렉토리와 병렬입니다.

    OS X은 여러 바이너리를 단일 파일에 넣을 수있는 범용 바이너리 개념으로이 문제를 다르게 해결합니다. 현재 최대 4 개의 CPU 유형 (32 비트 및 64 비트 PowerPC, 32 비트 및 64 비트 Intel)을 지원하는 실행 파일이있을 수 있습니다.

    Xcode로 Universal 바이너리를 쉽게 만들 수 있지만 명령 줄 도구로는 약간의 고통이 있습니다. 그러면 Autoconf 기반 빌드 시스템을 갖춘 범용 Intel 전용 빌드가 제공됩니다.

    $ ./configure --disable-dependency-tracking CFLAGS='-Arch i386 -Arch x86_64' \
      LDFLAGS='-Arch i386 -Arch x86_64'
    

    PowerPC 지원이 필요한 경우 CFLAGSLDFLAGS-Arch ppc -Arch ppc64를 추가하십시오.

    종속성 추적을 비활성화하지 않으면 첫 번째 플랫폼에 대해 새로 빌드 된 .o 파일이 있으면 make(1)이 필요하지 않다고 확신하므로 하나의 플랫폼에 대해서만 빌드하게됩니다. 두 번째 플랫폼을 구축하기 위해. 위의 예제에서는 모든 것을 두 번 빌드해야합니다. 여전히 PowerPC 지원이 필요한 경우 완전 범용 바이너리의 경우 네 번.

    ( Apple 기술 노트 TN2137 의 자세한 정보)

  • 개발자 도구는 기본적으로 OS X에 설치되어 있지 않습니다.

    Lion 이전에는 시스템에 적합한 개발 도구를 얻을 수있는 가장 안정적인 장소는 OS 디스크였습니다. 그들은 선택적 설치입니다.

    OS 디스크에서 개발 도구를 설치할 때 좋은 점은 도구가 OS에서 작동한다는 것을 알고 있다는 것입니다. Apple Apple이기 때문에 최신 컴파일러를 실행하려면 최신 버전의 OS가 있어야하며 항상 오래된 도구를 다운로드 할 수있는 것은 아니므로 OS 디스크가 가장 쉬운 경우가 많습니다 주어진 개발자 또는 테스트 상자에 적합한 도구를 찾는 방법.

    Lion은 설치 미디어를 없애려고 노력하므로 값 비싼 USB 키 버전을 구입하지 않으면 App Store에서 Xcode 다운로드 를 수행해야합니다.

    다운로드 한 Xcode DMG의 버전을 최소한 몇 개는 유지하는 것이 좋습니다. Lion의 후임자가 1 년에서 3 년 후에 나올 때 Lion 테스트 VM에 동시 버전의 Xcode를 설치할 수있는 방법없이 자신을 발견 할 수 있습니다. 가용성 문제와 OS 미디어 부족으로 인해 이전 버전의 Xcode를 얻을 수없는 경우 미리 계획하십시오.

53
Warren Young

거대한 GOTCHA-Mac OS 파일 시스템은 대소 문자를 구분하지 않습니다.

30
gabe.

Fink와 MacPorts는 OS X에서 유닉스 패키지를 얻는 전통적인 방법이지만, 나에게 더 효과적이며 시스템에 덜 영향을주는 brew라는 새로운 도구를 확인하는 것이 좋습니다. 사용하다. 기본적으로 tarball을 다운로드하여/usr/local에 설치하지만 전체 프로세스를 매우 훌륭하게 자동화합니다.

http://mxcl.github.com/homebrew/

9
Sandy

거대한 GOTCHA-Mac OS 파일 시스템은 대소 문자를 구분하지 않습니다.

Mac OS X에서 대소 문자 구분 디스크 이미지를 만들어 일반 하드 드라이브 볼륨으로 마운트 할 수 있습니다.

# cf. http://codesnippets.joyent.com/posts/show/8617
IMAGE="${HOME}/Desktop/Case Sensitive Test.dmg"
VOLNAME="Case Sensitive Test"

hdiutil create "${IMAGE}" -size 10m -fs HFSX -volname "${VOLNAME}" -layout NONE

hdiutil attach "${IMAGE}"

cd "/Volumes/${VOLNAME}"
touch foo.txt Foo.txt
open .
ls -l [Ff]oo.txt
stat -f "inode: %i  --  name: %N" [Ff]oo.txt

cd ~
hdiutil detach "/Volumes/${VOLNAME}"
4
taco

네트워크 스택을 Solaris, BSD, Linux 및 Windows에서 OSX로 포팅 할 때주의를 기울여야 할 유일한 요점은 FreeBSD와 마찬가지로 전체 툴 체인이 상당히 오래되었다는 것입니다.

애플은 OSX Lion과 함께 속도를 높이고 있지만 Leopard, Snow Leopard는 최신 Linux 배포판보다 뒤에 있으며 많은 표준이 지원되지 않습니다. 필자의 경우 RFC 3678 (멀티 캐스트 소스 필터에 대한 소켓 인터페이스 확장)가 매우 불편한 것으로 나타났습니다.

OSX 서버에서 HTTP 제공을 위해 권장하는 대소 문자 구분 파일 시스템을 설치했습니다.

  • 오래된 GCC
  • 오래된 Autoconf, Automake, libtool
  • Pthread 스핀 록이 없으며 OSX는 기본 대안을 제공합니다.
  • 재 임대 자 NSS API가 많지 않습니다.
  • 지나치게 유용하지 않음 /proc 파일 시스템.
  • 아니 /dev/rtc, /dev/hpet, RDTSC이 (가) 김치에 빠진 것 같습니다. OSX는 기본 대안을 제공합니다.
  • epoll는 없지만 poll 및 kqueue가 있습니다.
3
Steve-o

다음은 선택된 개발 기사 인 Cocoa Literature List의 좋은 소스입니다.

http://osx.hyperjeff.net/Reference/CocoaArticles

(언젠가 Mac OS X 관련 제품을 사용하려는 경우 특히 유용 할 수 있습니다.)

3
frank

OS X는 pthread_cond_timedwait 그러나 절대 달력 시간을 사용하며 단조 증가하는 시간을 사용할 방법이 없습니다.

1
andrewrk