Xcode Apple Mach-O linker (ld) ошибка

Привет, я пытаюсь следовать курсу stanford cs106 / x, но они используют определенные библиотеки, которые больше не предоставляют. Мне удалось найти их версию, но я постоянно получаю сообщение об ошибке. Я добавил .h файлы в текущий проект, в котором я их использовал.
Это простой код, который я запускаю на C ++:

#include <iostream>
#include "genlib.h"#include "simpio.h"

int main()
{
cout << "How much do you love me? ";
int howAweSome = GetInteger();
for (int i = 0; i < howAweSome; i++)
cout << "10GB rocks!" << endl;
return 0;
}

Возникают следующие ошибки:

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

Вот используемые библиотеки:

«Simplio.h»:

/*
* File: simpio.h
* Last modified on Wed Jul 22 07:01:03 2009 by eroberts
*      modified on Wed Sep 18 13:34:29 2002 by zelenski
* -----------------------------------------------------
* This interface provides access to a simple package of
* functions that simplify the reading of console input.
*/

#ifndef _simpio_h
#define _simpio_h

#include "genlib.h"
/*
* Function: GetInteger
* Usage: n = GetInteger();
* ------------------------
* GetInteger reads a line of text from standard input and scans
* it as an integer.  The integer value is returned.  If an
* integer cannot be scanned or if more characters follow the
* number, the user is given a chance to retry.
*/

int GetInteger();

/*
* Function: GetLong
* Usage: n = GetLong();
* ---------------------
* GetLong reads a line of text from standard input and scans
* it into a long integer.  The long is returned.  If the
* number cannot be scanned or if extra characters follow it,
* the user is given a chance to retry.
*/

long GetLong();

/*
* Function: GetReal
* Usage: x = GetReal();
* ---------------------
* GetReal reads a line of text from standard input and scans
* it as a double.  If the number cannot be scanned or if extra
* characters follow after the number ends, the user is given
* a chance to reenter the value.
*/

double GetReal();

/*
* Function: GetLine
* Usage: s = GetLine();
* ---------------------
* GetLine reads a line of text from standard input and returns
* the line as a string.  The newline character that terminates
* the input is not stored as part of the string that is returned.
*/

string GetLine();

#endif

«Genlib.h»:

/*
* File: genlib.h
* Last modified on Sun Jul 17 2011 by Colin Leach
*      modified on Mon Jun  8 20:16:05 2009 by eroberts
*      modified on Wed Sep 18 13:41:31 2002 by zelenski
* -----------------------------------------------------
* This header file is indicated to be included in
* all the programs written for CS106B/X and provides a few
* common definitions. Note this header has a "using namespace std"* clause. If a file includes this header, it can then use
* features from the std namespace without qualifying by scope.
*
* IMPORTANT!!  I had to change the interface after failing to
* implement the Stanford version. Hence the genlib.h bundled
* with CS106B exercises is NOT compatible - don't use it with
* Colin's open-source library code.
* Apologies for the inconvenience, but I'm a C++ novice doing
* the best I can.
*/

#ifndef _genlib_h
#define _genlib_h

/* This strange-looking pragma is here to disable a warning from Visual C++
* about truncating long identifiers for debugging symbols. The warning is
* harmless, but a little disconcerting, so we suppress it. It comes up
* using STL and other long template expansions.
*/
#if defined(_MSC_VER)
#pragma warning(disable: 4786)
#endif

#include <string>
#include <exception>
using namespace std;

/*
* Class: ErrorException
* ---------------------
* This exception is raised by calls to the Error function, which
* makes it possible for clients to respond to error conditions
* without having their programs bomb completely.
*/

class ErrorException : public exception {
public:
ErrorException(string msg);
virtual ~ErrorException() throw ();
virtual const char* what() const throw ();
//virtual string getMessage();
private:
string msg;
};

/*
* Function: Error
* Usage: Error(msg);
* ------------------
* Error is used to signal an error condition in a program.  It first
* throws an ErrorException.  If that isn't caught, it outputs the
* error message string to the cerr stream and then exits the program
* with a status code indicating failure.
*/

void Error(string str);

/*
* Function macro: main
* --------------------
* The purpose of this macro definition is to rename the student
* main to Main in order to allow a custom main defined in our
* libraries to configure the application before passing control
* back to the student program.
*
* Note that this non-Stanford version only affects the zero-argument
* form of main(), not main(int argc, char* argv[]).
* If you want to use command-line arguments, you also have to catch
* your own ErrorException - see init.h/init.cpp for details.
*/

#define main() Main()

#endif

Я использую Xcode 4.5.2 на MacBook Pro OS X 10.8.2. Если кто-нибудь знает, как решить проблему, это будет очень полезно.

0

Решение

Файлы .h только объявляют о существовании определенных функций. Чтобы связать вашу программу с ними, вы должны иметь реальные реализации этих функций.

Для каждого из файлов .h должен быть соответствующий .c или .cpp, который вы бы включили в свою сборку. (Или, если он был распространен как двоичный файл, .a или .dylib.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]