objective-c - 在 Linux (Ubuntu) 上编译 Objective-C 项目

标签 objective-c linux ubuntu compilation

如何使 Objective-C 项目在 Ubuntu 上运行?

我的文件是:

Fraction.h

    #import <Foundation/NSObject.h>

    @interface Fraction: NSObject {
        int numerator;
        int denominator;
    }

    -(void) print;
    -(void) setNumerator: (int) n;
    -(void) setDenominator: (int) d;
    -(int) numerator;
    -(int) denominator;
    @end

Fraction.m

    #import "Fraction.h"
    #import <stdio.h>

    @implementation Fraction
    -(void) print {
        printf( "%i/%i", numerator, denominator );
    }

    -(void) setNumerator: (int) n {
        numerator = n;
    }

    -(void) setDenominator: (int) d {
        denominator = d;
    }

    -(int) denominator {
        return denominator;
    }

    -(int) numerator {
        return numerator;
    }
    @end

主.m

    #import <stdio.h>
    #import "Fraction.h"

    int main( int argc, const char *argv[] ) {
        // create a new instance
        Fraction *frac = [[Fraction alloc] init];

        // set the values
        [frac setNumerator: 1];
        [frac setDenominator: 3];

        // print it
        printf( "The fraction is: " );
        [frac print];
        printf( "\n" );

        // free memory
        [frac release];

        return 0;
    }

我尝试了两种编译方法:

  1. 纯 gcc:

    $ sudo apt-get install gobjc gnustep gnustep-devel
    $ gcc `gnustep-config --objc-flags` -o main main.m -lobjc -lgnustep-base
    /tmp/ccIQKhfH.o:(.data.rel+0x0): undefined reference to `__objc_class_name_Fraction'
    
  2. 我创建了一个 GNUmakefile Makefile:

    include ${GNUSTEP_MAKEFILES}/common.make
    
    TOOL_NAME = main
    main_OBJC_FILES = main.m
    
    include ${GNUSTEP_MAKEFILES}/tool.make
    

    ...然后运行:

    $ source /usr/share/GNUstep/Makefiles/GNUstep.sh
    $ make
    Making all for tool main...
     Linking tool main ...
    ./obj/main.o:(.data.rel+0x0): undefined reference to `__objc_class_name_Fraction'
    

所以在这两种情况下,编译器都会卡在

    undefined reference to `__objc_class_name_Fraction'

您知道如何解决这个问题吗?

最佳答案

没错。在这两种情况下,您都没有在要编译的文件列表中包含 Fraction.m,因此它找不到类 Fraction

的实现

从评论来看,这个命令有效

gcc `gnustep-config --objc-flags` -o main *.m -lobjc -lgnustep-base

关于objective-c - 在 Linux (Ubuntu) 上编译 Objective-C 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1558462/

相关文章:

objective-c - 在 iOS 中读取文件时出现 malloc 错误

iphone - 按下主页按钮后,如何在背景中对图像进行动画处理?

c - 如何为 scandir() 实现自定义 compar()

Java调用bash脚本: Permission Denied Error

linux - 须藤:找不到命令

objective-c - Cocoa/Objective-C 和分布式对象的例子?

ios - 无法连接到 FCM

linux - 尝试添加 providerAccount 时 Yodlee Y400 错误在 Windows 上有效,但在 Linux 上很少

ubuntu - ubuntu配置文件中 '#'和 '*'字符的区别

java - Spring 代理 : Error opening zip file or JAR manifest missing