【问题标题】:Error compiling many source files on Linux在 Linux 上编译许多源文件时出错
【发布时间】:2014-10-11 14:32:49
【问题描述】:

我在 Linux 中编译时遇到了问题,我所做的与许多其他线程和书籍所建议的完全相同,但无法理解我的错误。这是我的源文件:main.c、process_info.c 和 process_info.h

现在我忽略了我的代码的正确性,因为我正在尝试编译它以查看它是否有效并修复错误并且它们会出现(我对 Linux 非常陌生,并且在不使用 IDE 的情况下没有进行任何调试)。

要在 Mint Linux 17 - Cinnamon 上编译我的源代码,我正在终端上尝试:

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);
    }

  }
}

【问题讨论】:

  • 你应该用gcc -Wall -g编译你的源文件(然后使用gdb调试器)
  • 当链接器抱怨它找不到你知道你定义的符号时,总是先检查拼写。
  • @JoachimPileborg,感谢您的建议,我很惭愧我没有注意到这一点,我已经习惯了被 IDE 明确地大喊大叫,我没有注意到这个问题。
  • @BasileStarynkevitch,我来看看-g是什么研究如何使用gdb。谢谢。
  • @user1945925:这次你被编译器“”了,那又怎样? ;-)

标签: c linux compiler-errors


【解决方案1】:

非常简单:)

您已经定义了 readFIle 但声明名称是 readFile 并且您试图调用它,但它没有定义。检查两者的拼写。

【讨论】:

  • 不敢相信我错过了最基本的故障排除任务......我没有注意到,因为我习惯了在发生这种情况时被 IDE 大喊大叫。
【解决方案2】:
readFIle

readFile

所以要求我输入更多文字,所以就在这里。

【讨论】:

  • 谢谢,看来每个人都很快发现了这个问题,我对你的回复投了赞成票,但我把它给了下面的人,因为他先回答了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多