2

XcodeにCライブラリを追加しようとしています。cs50.cオンラインのCクラスからライブラリをダウンロードしましたが、zipファイルにはとの2つのファイルが含まれていますcs50.h

次のコマンドを使用してこれらのファイルをインストールしました。

gcc -c -ggdb -std=c99 cs50.c -o cs50.o
ar rcs libcs50.a cs50.o
rm -f cs50.o
chmod 0644 cs50.h libcs50.a
sudo mv cs50.h /usr/include
sudo cp libcs50.a /usr/lib

プロジェクトをビルドすると、次のエラーメッセージが表示されます。

Undefined symbols for architecture x86_64:
"_GetString", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

これは、プログラムでヘッダーファイルを参照する方法です。

#include </usr/include/cs50.h>

パスを含めないと、ファイルが見つかりませんというメッセージが表示されます。

私のXcodeのバージョンはバージョン4.5.2(4G2008a)で、OSX10.7.5を実行しています。

提案をありがとう。

アップデート:

実際のエラーメッセージ

ビルドフェーズに-lcs50を追加しました

4

2 に答える 2

2

原則として、/usr非常に正当な理由がない限り、何もインストールまたは変更しないでください。このディレクトリはオペレーティング システム用に予約されており、すぐに多くの問題が発生する可能性があります。たとえば、システム ライブラリまたはヘッダー ファイルを誤って上書きし、そこに新しいものをインストールしても、オペレーティング システムの更新時に問題が発生する可能性があります。

これをシステム全体にインストールする必要がある場合は、 に入れ/usr/localます。

ただし、デバッグ情報を使用してライブラリをコンパイルしたので、プロジェクトでライブラリをテストして試してみたいと思います。

そのためには、ソースを新しい「C/C++ ライブラリ」ターゲットとしてプロジェクトに追加する方がはるかに簡単です。その後、Xcode は、コンパイル、適切なプロセッサ アーキテクチャ (32 ビットまたは 64 ビット) の選択、Xcode でのソース レベルのデバッグ サポート、アプリのインストールやパッケージの作成など、面倒な詳細をすべて処理します。その場合、Xcode は依存関係も自動的にバンドルします。

于 2012-12-24T16:46:16.973 に答える
0

gcc を使用して cs50.h ライブラリをコンパイルしようとすると、最新の 64 ビット Mac のほとんどで失敗することがわかりました。Xcode 4.x は通常、64 ビット互換のライブラリ形式を必要とします。GCC は、64 ビット オブジェクト ファイルを含むように更新されていません。Clang/LLVM は gcc の代替として人気が高まっており、Apple では優先コンパイラ エンジンとして Xcode に使用されています。個人的にはまだ試していませんが、Xcode と互換性のあるライブラリを作成するために Xcode を調査する予定です。私は edX で Harvardx cs50x コースを受講していますが、経験豊富なプログラマーにとっても素晴らしいコースです。cs50.h ライブラリは、文字列、整数などのさまざまな変数タイプに対して比較的堅牢な I/O ルーチンを提供するため、興味深いものです。バッファオーバーフロー攻撃に対する優れた保護を含む、c プログラミング言語の float。フレームワークとも呼ばれる Xcode に追加するカスタム ダイナミック ライブラリを実際に構築しています。Apple 開発者アカウントをお持ちの場合は、フレームワーク プログラミング ガイドをご覧ください。役立つはずです。

于 2013-03-07T14:59:30.700 に答える