ソフトウェア開発者がLinuxからOS Xに切り替えるときに直面する問題は何ですか?

ソフトウェア開発者がLinuxからOS Xに切り替えるときに直面する問題は何ですか?

私はUbuntu / Fedora / Red Hat / Suseを使用しましたが、OS Xはまったく使用していません。 OS Xを定期的に使用するには、どのような点に注意する必要がありますか?

私が使用するツールには、GNUツールチェーン、C ++ / Boostなどが含まれます。

ベストアンサー1

私は数年前も同じことをしました。私が経験したことは次のとおりです。

  • 一般的なデスクトップLinuxは、OS Xよりもユーザースペースが豊富です。

私が使用したものとは異なるツールを見逃す可能性があるため、代替提案について具体的に説明する必要はありません。

代わりに単にインストールしてくださいファンキージャズMacポートまたは自分で作った最初。これらのシステムは、LinuxまたはBSDの一般的なパッケージ管理システムを提供します。それぞれ独自の味と包装があるので、あなたの好みや必要に応じて正しい選択が異なります。

どのパッケージシステムも必要なプログラムをすべて提供しない場合があります。一部のプログラムはOS Xに移植されていないため、次のバージョンには表示されません。どのパッケージシステムそれにもかかわらず、これらのシステムはOS Xに付属の機能を大幅に拡張し、Linuxで簡単に切り替えることができます。

  • OS Xコマンドラインコンパイラはデフォルトで64ビット実行可能ファイルをビルドします。

Leopard以前のバージョンでは、コンパイラはデフォルトで32ビット実行可能ファイルを構築しました。これにより、さまざまな方法で問題が発生する可能性があります。再構築することはできませんが、接続する必要がある古い32ビットライブラリがある可能性があり、システムはまだ32ビットモードで実行されている可能性があります。

32ビットビルドを強制する1つの方法は、gccビルドシステムでgcc-4.0以前のデフォルトの32ビットLeopardコンパイラであるデフォルト値オーバーライドを使用することです。 (gccこれはSnow Leopardのデフォルトの64ビットシンボリックリンクですgcc-4.2。)autoconfベースのビルドシステムを使用すると、次のように動作します。

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

CXX(このビットは、プログラムにC ++コンポーネントが含まれている場合にのみ必要です。)

別の方法は、-m32コンパイラとリンカに渡すことです。

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

より多くの入力が必要ですが、最新のGCCで32ビットビルドを取得できます。

  • 動的リンクは非常に異なります。

あなたが手で命令を書く人なら、ld今はその習慣を破る時です。コンパイラを介してプログラムとライブラリをリンクするかlibtool、 。

たとえば、どのライブラリに接続するかを調べるのではなく、otool -L someprogram筋肉の記憶を更新して入力する必要があります。ldd someprogramsomeprogram

最初に頭を傷つける動的リンクのもう1つの違いは、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 Dee Boerが書いた。これに関する良い記事、詳細は次のとおりです。

  • ダイナミックリンク+サードパーティパッケージは、初期段階で頭痛を引き起こす可能性があります。

ライブラリを標準の場所にインストールしないサードパーティパッケージのライブラリを使用しようとすると、最初に動的接続の問題が発生する可能性が高くなります。Macポートたとえば、または/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互換性の問題に対処します。

64ビットLinuxでは、32ビットをサポートする理由が何であれ、両方のフォーマットが必要なライブラリなどの2つのコピーが作成され、64ビットバージョンは既存のバージョンlib64lib同じディレクトリにあります。 。

OS Xでは、複数のバイナリを単一のファイルに入れることができる汎用バイナリの概念を使用して、この方法を別の方法で解決します。現在、最大4つのCPUタイプ(32ビットおよび64ビットPowerPC、32ビットおよび64ビットIntel)をサポートする実行可能ファイルがある可能性があります。

Xcodeを使用すると汎用バイナリを作成するのは簡単ですが、コマンドラインツールを使用すると少し面倒です。これにより、Autoconf ベースのビルドシステムの一般的な Intel 専用ビルドが提供されます。

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

PowerPCサポートが必要な場合は、-arch ppc -arch ppc64に追加してくださいCFLAGSLDFLAGS

.o依存関係トレースを無効にしないと、最初のプラットフォーム用の新しいファイルがあることは、2番目のプラットフォームに対してもmake(1)ビルドする必要がないことを示すため、1つのプラットフォームに対してのみビルドされます。上記の例では、すべてを2回ビルドする必要があります。それでもPowerPCサポートが必要な場合は、完全な汎用バイナリの場合は4回ビルドする必要があります。

(詳細はアップルテクニカルノートTN2137.)

  • デフォルトでは、開発者ツールはOS Xにインストールされません。

Lion以前は、システムに適した開発ツールを入手できる最も信頼できる場所はオペレーティングシステムCDでした。オプションのインストールです。

オペレーティングシステムCDから開発ツールをインストールすると、ツールがオペレーティングシステムで使用されることがわかるという利点があります。 AppleはAppleなので、最新のコンパイラを実行するには最新バージョンのOSが必要ですが、常に古いツールのダウンロードを提供するわけではないため、OS CDは通常、特定の環境に適したツールを見つける最も簡単な方法です。 。開発またはテストボックス。

Lionはインストールメディアを取り除こうとしたので、高価なUSBキーバージョンを購入しない限りApp StoreからXcodeをダウンロード

ダウンロードするXcode DMGの少なくともいくつかのバージョンを維持することをお勧めします。 Lionの後続製品が1〜3年後にリリースされると、LionテストVMに同時バージョンのXcodeをインストールできないことがわかります。可用性の問題やオペレーティングシステムのメディア不足により以前のバージョンのXcodeが入手できない場合に備えて、事前に計画してください。

おすすめ記事