2011-08-06 11 views
1

は、私はちょうどOSX LionでGNU/linux C開発環境を模倣するにはどうすればよいですか?

$ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include 
ld: library not found for -lcrt1.10.6.o 
collect2: ld returned 1 exit status 

何罰金... OSXライオン

#include <stdio.h> 
int main() { 
    printf("hello world\n");                   
    return 0; 
} 

$ gcc hello.c 
test.c:1:19: error: stdio.h: No such file or directory 
test.c: In function ‘main’: 
test.c:3: warning: incompatible implicit declaration of built-in function ‘printf’ 

[OK]をgccでコンパイルするには、単純なCプログラムを作成しようとしましたか?見よう...

$ gcc -I /Developer/SDKs/MacOSX10.6.sdk/usr/include -L/Developer/SDKs/MacOSX10.6.sdk/usr/lib test.c 
$ ./a.out 
hello world 

最後に!

こんにちは世界を動かすだけの努力をしているようですが、Linux上で動作するようにgccがMacOSX10.6.sdkディレクトリのライブラリとヘッダファイルをデフォルトで見つけるようにするにはどうすればいいですか? linuxでlddとldconfigが非常に便利で、OSX上に存在しないようです...同等のものはありますか? OSXでCを開発するための他の便利なツールはありますか?

はい、私はxcodeがこれをより簡単にしていることを知っていますが、vimとコマンドラインを使ってopensourceのCプロジェクトで作業したいとします。

+0

私の知る限り、あなたの最初の試みはうまくいきました。少なくとも私のマシンで動作します。 – zneak

+0

私はxcodeが何をしているのか、どの環境変数を設定しているのか、どのオプションをgccに渡してメイクファイルに複製するのかなどを調べようとします。このようにして、あなたは 'make 'とvoilaだけを行います。 –

+0

@zneak OSXのライオン(10.7)にアップグレードして以来、シンプルなCプログラムをコンパイルしようとしたのはこれが初めてです。 –

答えて

1

私は三つの可能性を考えることができます:あなたは10.6をインストールし、10.7にアップグレードしていた

  1. 。開発ツールを入手するには、新しいバージョンのXcodeをインストールする必要があります(4.1、アプリケーションストアから入手してください)。

  2. Xcodeをインストールし、カスタムインストールを行い、「UNIX開発」などのチェックを外しました。インストーラを再実行し、不足している部分をインストールします。

  3. gccのサードパーティ製の壊れたバージョンをインストールしました。お試しください。which gcc

+0

hm ... xcode 4.1を持っていないかもしれません...今すぐインストールしてください。私はそれが私の環境を修正する場合、あなたの答えを受け入れるでしょう:) –

+0

私は馬鹿のように感じ、私はライオンにアップグレードしたときにxcodeをアップグレードしていない。 –

1

OS X 10.7では、Mac App StoreからXcode 4.1をダウンロードしてダウンロードしたインストーラ(/Applications)を実行した場合、最初の試みは、いくつかの環境変数を設定していないAppleのgccツールチェーンを見て影響を与えます。この場合生成されるオブジェクトファイルは、デフォルトの10.7 ABI(includeファイルとlibs)を使用しています。 OS X 10.6と互換性のあるものを作成したい場合は、ツールチェインに10.6 SDK ABIを使用するよう指示する必要があります。これは、3回目の試行で行ったことです。スタンドアロンプ​​ロジェクトでは、通常、ビルドを自動化するMakefileを設定することでこれを処理します。しかし、以前のバージョンのOS X(10.6など)でも動作するOS X(ここでは10.7)で何かを構築しようとしているのでなければ、通常はSDKを使用する必要はありません。

関連する問題