我正在尝试向Xcode添加一个C库。我从在线C类下载了该库,压缩文件包含两个文件:cs50.c
和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),我正在运行OS X 10.7.5。
感谢您的任何建议。
更新
答案 0 :(得分:2)
作为一般规则,除非您有充分理由这样做,否则不应在/usr
中安装或修改任何内容。此目录是为操作系统保留的,您可以快速遇到很多问题 - 例如,如果您不小心覆盖系统库或头文件,甚至在安装新内容时可能会在更新操作系统时出现问题。
如果您确实需要在系统范围内安装此系统,请将其放入/usr/local
。
但是,由于您使用调试信息编译了库,我假设您还想在项目中测试并使用它。
为此,将源作为新的“C / C ++库”目标添加到项目中要容易得多。然后Xcode将处理所有丑陋的细节,例如编译,选择正确的处理器架构(32位或64位),您将在Xcode中获得源级调试支持,以及是否要安装应用程序或创建包对于它,Xcode也会自动为您捆绑依赖项。
答案 1 :(得分: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例程,例如:字符串,整数。 float用于c编程语言,包括对缓冲区溢出攻击的良好保护。 您实际上正在构建一个要添加到Xcode的自定义动态库,Xcode也称为框架。如果您有苹果开发人员帐户,请查看框架编程指南,它应该证明是有用的。