将 C 函数转换为 Objective C 或包含 C 库的替代方法?

发布于 2024-08-27 00:59:40 字数 1039 浏览 4 评论 0原文

背景:

我是 Objective-C 的新手,以前从未接触过 C。我试图在我的 iPhone/iPod Touch 项目中包含一个 C 库,但无法使用包含的指令成功编译该库的源代码,因此我不得不在 Xcode 中包含 .h 和 .c 文件。该图书馆用于希伯来语日期和相应的犹太节日。它可以在这里找到: http://sourceforge.net/projects/libhdate/

我似乎看不到将 .c 文件导入到我的实现文件中。不过我可以导入 .h 文件。当我尝试使用 #import "file.c"(其中 file.c 是 XCode 中的文件)时,它不起作用。为什么不呢?

我考虑过用 Objective-C 编写函数,尽管只是我需要的函数而不是整个库。

如何使以下 C 函数在 Objective-C 中工作?是否还有其他需要包含/重新编码/编译的东西?为何如此?我几乎可以肯定缺少了一些东西,但我不确定是什么。

代码:

int hdate_get_omer_day(hdate_struct const * h)
{
    int omer_day;
    hdate_struct sixteen_nissan;

    hdate_set_hdate(&sixteen_nissan, 16, 7, h->hd_year);
    omer_day = h->hd_jd - sixteen_nissan.hd_jd + 1;

    if ((omer_day > 49) || (omer_day < 0)) 
        omer_day = 0;

    return omer_day;
}

那么...我应该将其转换,还是尝试以某种方式编译为适当的格式,如何进行? (顺便说一句,我不知道静态库应该采用什么格式,或者它是否应该是静态的...... - 我在这里迷失了......)

我感谢您的帮助!

Background:

I'm new to Objective-C and I've never touched C before. I'm trying to include a C library in my iPhone/iPod Touch project and I could not successfully compile the library's source code using the included instructions, so I've resorted to including the .h and .c files in Xcode. The library is for Hebrew Dates and corresponding Jewish Holidays. It can be found here: http://sourceforge.net/projects/libhdate/

I cannot seem to import the .c files into my implementation files. I can import the .h files though. When I try to use #import "file.c", where file.c is a file that is in XCode, it doesn't work. Why not?

I've considered just writing the functions over in Objective-C, albeit only my needed functions and not the whole library.

How can I make the following C function work in Objective-C? Are there other things that need to be included/re-coded/compiled? How so? I am almost certain something is missing, but I'm not sure what.

Code:

int hdate_get_omer_day(hdate_struct const * h)
{
    int omer_day;
    hdate_struct sixteen_nissan;

    hdate_set_hdate(&sixteen_nissan, 16, 7, h->hd_year);
    omer_day = h->hd_jd - sixteen_nissan.hd_jd + 1;

    if ((omer_day > 49) || (omer_day < 0)) 
        omer_day = 0;

    return omer_day;
}

So... should I be converting it, or trying somehow to compile to an appropriate format and how so? (I don't know what format a static library should be in, by the way, or if it should be static... - I'm so lost here....)

I appreciate the help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷月断魂刀 2024-09-03 00:59:40

您不导入实施文件。您只需将它们一起编译并包含适当的标头,以便您的代码了解函数和数据类型声明。

You don't import implementation files. You just compile them alongside and include the appropriate header so that your code knows about the function and datatype declarations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文