使用系统函数运行另一个.cpp文件

时间:2016-03-20 04:39:02

标签: c text-files main src

这个程序是一个'grader'程序,我只需要用户输入一个txt文件的名称和一个处理txt文件并获取其信息的.cpp源文件。然后我将源文件与txt文件一起编译,该文件输出另一个文本文件。然后将这种新纺织品与预期的产量进行比较(我已经给出了它)。

系统函数允许用户从C程序运行UNIX命令。当我尝试编译用户提供的源文件时

我收到错误说

  

“_ main”,引用自:主要可执行文件的隐式入口/开始   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
  sh:./ myProg:没有这样的文件或目录

我正在编译的源文件由我的教授提供,其中有一个函数如下所示:

#include <stdio.h>
#include <stdlib.h>
#define  MAX_VALUES    3
#define  OUTPUT_LINES   5

int notmain(int argc, char **argv)
{
/*
 * argv is just the file name

 */
//printf(argv[1]);
int values[MAX_VALUES];
int i, j;


FILE *inputFile;
char name [20]="input.txt"; // I have included this piece of code to see if there is a correct output from the source file provided by the user. 
if ( (inputFile = fopen(name, "r") ) == NULL) {
     printf("Error opening input file.\n\n");
     exit(1);
}
for(i = 0; i < MAX_VALUES; i++)
    fscanf(inputFile, "%d", &values[i]);
for(i = 0; i < OUTPUT_LINES; i++){
   for (j=0; j < MAX_VALUES; j++)
      printf("%d ", values[j]*(i+1) + j);
   printf("\n");
}
return 0;
}

我编写的代码如下所示:此代码从用户获取信息然后编译它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_LINES 5

int main(){
    char srcfile[200];
    char inpfile[200];
    char resultfile[200];

    printf("Please enter the name of the source file: \n");
    scanf("%s",srcfile);
    printf("Please enter the name of the input file: \n");
    scanf("%s",inpfile);
    printf("Please enter the name of the expected result file: \n");
    scanf("%s",resultfile);

    char test1 [100]="gcc -o myProg ";
    char test2 [100]="./myProg ";

    strcat(test2,inpfile);
    strcat(test2," > ");
    strcat(test2,resultfile);
    strcat(test1,srcfile);
    printf("%s\n",test1); //these are just tests 
    printf("%s",test2);  //these are just tests

    if (system(test1)) {
        printf("There is an error compiling the program  ");
    } 

    if (system(test2)!= 0) {
        printf("There is an error running the executable");
    } 

    return 0;
}

如果您正在寻找解决方案,我已将其发布在答案中

2 个答案:

答案 0 :(得分:0)

您尝试编译的文件没有main函数,这是C程序的入口点。这意味着实际上不可能将该文件单独构建到可执行文件中。

如果函数的名称应该是notmain,那么您必须编写另一个具有main函数的源文件并调用notmain。第二个main将属于您的程序正在编译的可执行文件,而不属于您的程序。您将有三个源文件:

  • 您的评分程序,负责编译。
  • 一种有效的包装文件:

    int main(int argc, char *argv[]) {
        notmain(argc, argv);
    }
    
  • 最后是要评分的程序。

您还需要extern notmain功能或提供标题才能分享。{p>然后,您的评分程序将编译包装器main和要一起评分的源文件。

答案 1 :(得分:0)

问题:你能运行两个带有两个主要功能的c程序吗?答案:是的。为此,您必须使用终端分别使用两个主要功能编译程序。然而,如果他们彼此互动我害怕我没有解决方案现在在这个特定的情况下这里我是如何做到的。我去了航站楼并写道。 在这种情况下,我运行一个程序,使用系统函数

运行另一个程序
gcc -c main.c (this compiles the main function). 

然后我写了gcc -o Myprogram main.o 这将创建一个名为Myprogram的可执行文件,您可以通过编写

来运行它
 ./Myprogram 

在这种情况下,我的main方法是编译另一个源文件,所以我不需要在终端中编译该程序。当我编译这个程序时,它在可执行文件和源文件所在的同一目录中创建了一个output.txt文件。