2015-10-18 3 views
-1

Я работаю над IDE NetBeans 8.0.2 (Build 201411181905) на MacBook Air (13 дюймов, середина 2011 года) с (OSX 10.10.5) с версией компилятора Apple LLVM версии 7.0.0 (clang -700.0.72)/Цель: x86_64-apple-darwin14.5.0.Невозможно скомпилировать программу C

Я хочу собрать следующие коды: стек/главный

#include "stack.h" 
#include <stdio.h> 
#include <stdlib.h> 
/* 
* 
    */ 
int main(int argc, char** argv) { 

push(1.2); 
(void)printf("On Stack"); 


//return (EXIT_SUCCESS); 
} 

стек/SRC/stack.c

#include <stdio.h> 
#include "stack.h" 

/* initialize stack for float values */ 
static float stack[STACK_LENGTH] = { 0.0 }; 

/* 
* increase stack and push new float into stack[0] 
* params: 
* float > new value to push to position 0 
* return: 
* void 
*/ 
void push(float new) { 
    /* to do */ 
    if(pos<STACK_LENGTH){ 
     stack[pos++]=new; 
    }else{ 
     (void)printf("Stack-Overflow\n"); 
    } 
} 

/* 
* pop float at position 0 and decrease stack 
* params: void 
* return: float > value at position 0 
*/ 
float pop(void) { 
    /* to do */ 
    if(pos>0){ 
     stack[pos--]; 
    } else{ 
     (void)printf("Stack-leak\n"); 
    } 
} 

/* 
* get stack at pos 
* params: int > stack position 
* return: float > value at position pos 
*/ 
float get(int pos) { 
    /* to do */ 
    float value; 
    return value = stack[pos]; 
} 

/* 
* set float value in stack at pos 
* params: 
* float > value to set at position pos 
* int > stack position 
* return: 
* void 
*/ 
void set(float value, int pos) { 
    /* to do */ 
    stack[pos] = value; 
} 

/* 
* list stack to console 
* params: 
* void 
* return: 
* int > number of characters printed 
*/ 
int list(void) { 
    /* to do */ 
    return 0; 
} 

/* 
* clear stack 
* params: void 
* return: void 
*/ 
void clear(void) { 
    /* to do */ 
    float stack[15]= {0.0}; 
} 

стек/SRC/stack.h

#ifndef STACK_H_ 
#define STACK_H_ 

/* Includes */ 
#include <stdio.h> 
#include <stdlib.h> 

/* stack size */ 
#define STACK_LENGTH 15 

/* global variables*/ 
static float stack[STACK_LENGTH]; 
static int pos = 0; 

/*function declaration*/ 
void push(float); 
float pop(); 
float get(int); 
void set(float, int); 
int list(); 
void clear(); 



#endif /* STACK_H_ */ 

Когда я запускаю это заявление:

gcc -c demo_stack.c

Я получаю эту ошибку:

>fatal error: 'stack.h' file not found 
>#include "stack.h" 
>  ^
+1

Компилятор сообщает вам, что у него недостаточно информации, чтобы найти файл 'stack.h'. Вы должны добавить путь включения в свою командную строку компилятора. Для gcc это обычно делается с опцией '-I directoryNameGoesHere'. –

+0

Вы имеете в виду: gcc -c -l stack/src/demo_stack.c – ishango

ответ

1

Как вы можете видеть, что файлы находятся в разных папках и компилятор не может читать ваши мысли и ваши намерения:

stack/src/stack.c 
stack/src/stack.h 
stack/main/demo_stack.c? 

Прежде всего если вам нужно скомпилировать оба файла c, если вы хотите связать их вместе и создать исполняемый файл, так как файл с функцией main() ссылается на функцию push, которая объявлена ​​в stack.h, но определяет ее в stack.c. Затем вам нужно сообщить своему компилятору, что путь, который включает в себя stack.h, следует учитывать при компиляции основного файла. Ваша окончательная команда сборки должна выглядеть примерно так:

clang -c -I../stack demo_stack.c ../stack/stack.c 
+0

Я внес изменения и создал .o-файлы. Теперь я получаю это: 'главного корня $ GCC -c demo_stack.c корня $ НКИ -o stack.exe demo_stack.o неопределенных символов для архитектуры x86_64: "_push", ссылочных от: _MAIN в demo_stack.o л.д. : символ (ы) не найден для архитектуры x86_64 clang: ошибка: команда компоновщика не удалась с кодом выхода 1 (используйте -v, чтобы увидеть вызов) ' – ishango

+0

Получил! gcc stack.o demo_stack.o -o demo_stack – ishango

Смежные вопросы