【发布时间】:2015-11-16 22:29:52
【问题描述】:
我正在尝试用 C 语言链接和共享头文件;我想在许多程序之间共享这个功能,tool.c:
void sayHello() {
printf("Hello!");
}
...我在tool.h中定义函数:
void sayHello();
如果其他程序#include tool.h 让它们都可以调用sayHello 函数,这很有意义。我需要从多个文件创建一个程序。在这里,我可以创建一个完全不同的程序(目标)来调用该函数:
#include <stdio.h>
#include "/usr/someone/somewhere/tool.h"
int main() {
sayHello();
}
虽然,链接器进程失败:linker command failed with exit code 1。如果您愿意,请下载 Xcode 项目 here。
我做错了什么?
【问题讨论】:
-
你在链接
tool.c吗?发布错误消息而不是图像也会很有用。 -
感谢@FilipeGonçalves!你是什么意思“你正在链接”?感谢您的帮助。
-
在函数声明中包含头文件是不够的——您需要告诉链接器在哪里可以找到
sayHello()的代码。在命令行中,您通常通过在调用 gcc 时指示附加文件来执行此操作,例如gcc myprog.c tool.c(或者如果tool.c已经编译为库,则指明对应的库文件)。我不知道如何在 XCode 中做到这一点,但是您可以将tool.c编译成静态库,然后将其添加到项目依赖项中 - 参见 stackoverflow.com/questions/15973472/… -
所以,首先创建一个静态库(这样做的方法是使用 gcc 为
tool.o创建一个目标文件,然后使用ar(1)创建.a库 - 参见 @ 987654323@)。然后在需要使用时包含tool.h。然后将.a库文件添加到 XCode 中的项目依赖项列表中,如我之前提到的那个问题所示。 -
非常感谢您的解释。这真的很有帮助。问题是 Xcode 在程序编译之前不会给出可执行文件。由于我有一些错误,Xcode 不会编译我的 C 文件。错误是
linker command failed with exit code 1,因此链接器进程似乎存在问题 - 正如您所建议的那样。有什么建议吗谢谢!