Ошибка связи Apple Mach-O с curses.h - PullRequest
0 голосов
/ 08 марта 2012

Я неоднократно получал эту ошибку в своей программе. Я немного упростил ситуацию, чтобы проиллюстрировать основы, и все еще получаю ошибки. Мне сказали, что мне нужно добавить этот библиотечный файл в мой проект, чтобы он работал (libncurses.dylib), и он действительно решил некоторые проблемы, но не эту.

Вот мой код:

// screen.h

#ifndef screen_h
#define screen_h

#define MAC  1
#define WIN  2
#define LNX  3

#ifdef PLATFORM 
#undef PLATFORM 
#endif

#define PLATFORM MAC

void screen_erase();

#endif

// screen.c

#include <string.h>
#include <stdlib.h>

#include "screen.h"

#if PLATFORM == MAC

#include <curses.h> 

void screen_erase(){
    erase();
}

#endif

// main.cpp

#include <iostream>
#include <curses.h>
#include "screen.h"

using namespace std;

int main(){
    screen_erase();
}

И вот ошибка, которую я получаю:

Undefined symbols for architecture x86_64:
  "screen_erase()", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation

Что здесь происходит?

1 Ответ

1 голос
/ 08 марта 2012

Это потому, что вы смешиваете два разных языка: C и C ++.

В заголовочном файле screen.h измените объявление следующим образом:

#ifdef __cplusplus
extern "C" {
#endif

void screen_erase();

#ifdef __cplusplus
}
#endif

Это говорит компилятору C ++не делать искажение имени в имени функции screen_erase.

...