target c gnustep - не может разделить файлы интерфейса и реализации - PullRequest
0 голосов
/ 15 июля 2011

Я использую gnustep для target-c в Windows. Если я храню интерфейс и файлы реализации класса вместе с основным файлом, он компилируется без ошибок и дает ожидаемый результат.

Ниже приведен пример:

// 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

Как сохранить файлы отдельно и при этом успешно скомпилировать программу

Спасибо за помощь

Привет

Ответы [ 2 ]

0 голосов
/ 05 февраля 2015

Я знаю, что это старое, но дважды проверьте имя скомпилированных файлов на случай, если ошибка находится в другом файле.

Причины: класс myNewClass не указан вкод выше, и нет других импортов, кроме Foundation.

Имя файла в комментариях к коду и файл, который вы, похоже, компилируете, отличаются.

// File "test.m"

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

По видуэто, данный код должен скомпилироваться при выделении.

Кроме того, о вопросе «Также, как я включил« Скомпилированные файлы »?», предполагая, что вы имеете в виду файл .o, вам просто нужно включить заголовокфайл (.h) и убедитесь, что компилятор может найти соответствующий файл .o.Related: Как связать объектные файлы в C?Сбой с «Неопределенные символы для архитектуры x86_64»

0 голосов
/ 15 июля 2011

У вас есть ошибка компоновщика здесь.Скорее всего, вы не включаете необходимый заголовочный файл для myNewClass.

...