【问题标题】:How to work with C shared header files on a Mac?如何在 Mac 上使用 C 共享头文件?
【发布时间】: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,因此链接器进程似乎存在问题 - 正如您所建议的那样。有什么建议吗谢谢!

标签: c xcode


【解决方案1】:

问题不在于头文件本身;当您包含标题时,您没有告诉链接器在哪里可以找到代码的实际定义。所以你需要编译 .c 文件,例如进入静态库并将其添加到您的other_tool 的链接器选项中。

【讨论】:

  • 这是正确的。在 Xcode 中添加一个新的 C 库并向其中添加编译和头文件。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多