2

我正在尝试将 C 库添加到 Xcode。我从一个在线 C 类下载了库,压缩文件包含两个文件:cs50.ccs50.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),我正在运行 OS X 10.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 库很有趣,因为它为各种变量类型(例如 String、Integer)提供了相对健壮的 I/O 例程。float 为 c 编程语言,包括对缓冲区溢出攻击的良好保护。您实际上是在构建一个自定义动态库以添加到 Xcode,也称为框架。如果您有苹果开发者帐户,请查看框架编程指南,它应该很有用。

于 2013-03-07T14:59:30.700 回答