linux gnustep项目,在Linux(Ubuntu)上编译Objective-C项目

本文详细介绍了在Ubuntu系统上执行Objective-C项目的常见问题,重点在于解决在gcc和GNUstep环境中遇到的‘undefined reference to `__objc_class_name_Fraction’’错误,包括正确编译步骤、Makefile配置以及所需软件包安装建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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

我的文件是:

分数h

#import

@interface Fraction: NSObject {

int numerator;

int denominator;

}

-(void) print;

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

-(int) numerator;

-(int) denominator;

@end

分数

#import "Fraction.h"

#import

@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

主目录

#import

#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;

}

我尝试了两种方法进行编译:

纯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'

我创建了一个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

次佳方法

我不是像这样编写make文件的专家,我发现只需在ubuntu上键入以下内容就可以了:

gcc -I /usr/include/GNUstep/ -I /usr/include/mysql -L /usr/lib/GNUstep/\

-lgnustep-base -lmysqlclient\

-g -ggdb\

-fconstant-string-class=NSConstantString -o test *.m

我在这个项目上使用它:

如果上述GCC命令不起作用,则说明您尚未安装足够的软件包,请使用apt-cache搜索更多要安装的gcc和Objective C软件包(我只是随机安装了更多看上去相关的软件包,直到它起作用为止)

第三种方法

生成文件:

include ${GNUSTEP_MAKEFILES}/common.make

APP_NAME=Fraction

Fraction_HEADERS = Fraction.h

Fraction_OBJC_FILES = main.m Fraction.m

include ${GNUSTEP_MAKEFILES}/application.make

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值