2014-10-11 5 views
0

У меня возникла проблема с компиляцией в Linux, и я делаю то же самое, что и многие другие темы и книги, но не могу понять мою ошибку. Вот мои исходные файлы: main.c, process_info.c и process_info.hОшибка компиляции многих исходных файлов в Linux

На данный момент я игнорирую правильность своего кода, потому что я пытаюсь его скомпилировать, чтобы увидеть, работает ли он и исправляет ошибки, и они приходят о (я очень новичок в Linux и не делал отладки без использования IDE).

Чтобы скомпилировать мой источник на Mint Linux 17 - Корица, я пытаюсь это в терминале:

gcc main.o process_info.o -o newmain 

main.o: In function `main': 
main.c:(.text+0x26): undefined reference to `readFile' 
collect2: error: ld returned 1 exit status 

И я также пытался делать:

gcc -Wall main.c process_info.c -o newmain 

/tmp/ccnBKqCu.o: In function `main': 
main.c:(.text+0x26): undefined reference to `readFile' 
collect2: error: ld returned 1 exit status 

Я не знаю, почему я я получаю ошибку, так как я думал, что делаю все правильно.

Ниже содержание моих исходных файлов (код внутри не правильно, но при тестировании):

/****************************************************************** 
* 
* File: main.c 
* Description: Main file to execute code 
* 
*******************************************************************/ 
#include "process_info.h" 

int main() { 

    char *msg; 
    char msg_buffer[MAX_BUFF_SIZE]; 
    char file_buffer[MAX_BUFF_SIZE]; 
    int fileDes[FILE_DESC_SIZE]; 

    readFile(file_buffer); 

    msg = "hello world\n"; 
    pipe(fileDes); 

    if (fork() == IS_CHILD) { 
     // This is the child process 
     printf("child process: \n"); 
     write(fileDes[WRITE_INDEX], msg,MESSAGE_SIZE); 
    exit(0); // ends process 

    } 

    // This is the parent process 
    read(fileDes[READ_INDEX],msg_buffer, MESSAGE_SIZE); 
    write(WRITE_INDEX,msg_buffer, MESSAGE_SIZE); 

return 0; 

} 

/****************************************************************** 
* 
* File: OS_Proj1.h 
* Description: OS Fork and Pipe Project header 
* 
*******************************************************************/ 
#ifndef PROCESS_INFO_H 
#define PROCESS_INFO_H 

#include<stdlib.h> 
#include<stdio.h> 
#include <unistd.h> 
#include <stdbool.h> 

#define MAX_BUFF_SIZE 1024 // common value 
#define FILE_DESC_SIZE 2 
#define IS_CHILD  0 
#define MESSAGE_SIZE 12 
#define READ_INDEX  0 
#define WRITE_INDEX 1 
#define PERMISSION  0 
#define FILE_DIR_1  "/workspace/CSCI_474/Project1/filedat1" 
#define FILE_DIR_2  "/workspace/CSCI_474/Project1/filedat2" 
#define FILE_DIR_3  "/workspace/CSCI_474/Project1/filedat3" 
#define FILE_DIR_4  "/workspace/CSCI_474/Project1/filedat4" 
#define FD_ERROR  -1 

// Function prototypes 
void readFile(char *buffer); 


#endif 


/****************************************************************** 
* 
* File: process_info.c 
* Description: Main file to execute code 
* 
*******************************************************************/ 
#include "process_info.h" 
#include <fcntl.h> 

void readFIle(char *buffer){ 
    int fileDesc; 
    char filename[] = FILE_DIR_1 ; 

    fileDesc = open(filename,O_RDONLY,PERMISSION); 

    // test if file opened successfully 
    if(fileDesc == FD_ERROR){ 
    perror("Cannot open output file\n"); 
    exit(1); 
    } 
    // read the file if it opened successfully 
    else { 
    while( read(fileDesc,buffer,MAX_BUFF_SIZE) > 0 ) { 
     write(WRITE_INDEX,buffer,MAX_BUFF_SIZE); 
    } 

    } 
} 
+0

Вы должны скомпилировать исходные файлы с помощью 'gcc -Wall -g' (затем использовать отладчик' gdb') –

+2

Когда компоновщик жалуется, что он не может найти символ, который, как вы знаете, вы определили, всегда сначала проверяйте орфографию. –

+0

@JoachimPileborg, спасибо за совет Мне стыдно, что я этого не понимал, я так привык к тому, что я вскрикнул от IDE. Я не заметил этой проблемы. – user1945925

ответ

3

очень просто :)

Вы ReadFile определено, но имя декларации ReadFile и вы пытаетесь вызвать его, которая не имеет никакого определения. Проверьте правильность написания.

+0

не могу поверить, что я пропустил самую основную задачу по устранению неполадок .... я не заметил, так как я привык к тому, что меня кричат ​​на IDE, когда такие вещи случаются. – user1945925

3
readFIle 

readFile 

SO требует вхожу больше текста, поэтому здесь.

+0

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

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