0

我在 Windows 上将 gnustep 用于objective-c。如果我将一个类的接口和实现文件与主文件一起保存,它编译时不会出错并给出预期的输出。

以下是示例:

// File "classA.h"
#import <Foundation/Foundation.h>

@interface classA: NSObject
{
    int a;
}

-(void) print;
@end


// File "classA.m"
#import "classA.h"

@implementation classA

-(void) print
{
    a = 10;
    NSLog(@"a = %i", a);
}
@end


// File "test.m"
#import "classA.h"

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSLog(@"start");

    classA *objA = [[classA alloc] init];
    [objA print];
    [objA release];

    NSLog(@"done");

    [pool drain];
    return 0;
}

但是,如果我将接口和实现文件分开放置,则使用以下命令进行编译

gcc `gnustep-config --objc-flags` -o program program.m -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base

我收到以下错误

undefined reference to `__objc_class_name_myNewClass'
collect2: ld returned 1 exit status

我如何将文件分开并仍然成功编译程序

感谢帮助

问候

4

2 回答 2

0

我知道这是旧的,但请仔细检查编译文件的名称,以防错误出现在不同的文件中。

原因:上面的代码中没有引用类myNewClass,并且除了Foundation之外没有其他导入。

代码注释中的文件名与您似乎正在编译的文件不同。

// File "test.m"

gcc `gnustep-config --objc-flags` -o program program.m

看起来,给定的代码在拆分时应该可以编译。

另外,关于“我如何包含“编译文件”?”的问题,假设您的意思是 .o 文件,您只需要包含头文件 (.h) 并确保编译器可以找到匹配的 .o 文件. 相关:如何在 C 中链接目标文件?因“架构 x86_64 的未定义符号”而失败

于 2015-02-05T07:06:26.337 回答
0

你在这里有一个链接器错误。很可能,您没有包含 myNewClass 所需的头文件。

于 2011-07-15T07:48:32.917 回答