Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux终端gcc中编程编译c代码_C_Linux_Gcc_Compilation_Terminal - Fatal编程技术网

在linux终端gcc中编程编译c代码

在linux终端gcc中编程编译c代码,c,linux,gcc,compilation,terminal,C,Linux,Gcc,Compilation,Terminal,我正在Linux上编写一个c程序,将文本写入文件。我在尝试使用system(“gcc fileName.c”)将我创建的新文档编译成可执行文件时遇到了问题。该文件正在获取以下输入: char Msg[100] = {"#include <stdio.h>\nint main();\n\nint main()\n{\n\n\treturn 0;\n}"}; 如果我手动编译它,它工作得很好 我对c非常陌生,所以我不确定我错在哪里,任何帮助都将不胜感激 编辑: 文件内容: #includ

我正在Linux上编写一个c程序,将文本写入文件。我在尝试使用
system(“gcc fileName.c”)
将我创建的新文档编译成可执行文件时遇到了问题。该文件正在获取以下输入:

char Msg[100] = {"#include <stdio.h>\nint main();\n\nint main()\n{\n\n\treturn 0;\n}"};
如果我手动编译它,它工作得很好

我对c非常陌生,所以我不确定我错在哪里,任何帮助都将不胜感激

编辑:

文件内容:

#include <stdio.h>
int main();

int main() 
{

     return 0;
}
请不要太苛刻地评判,我只是在学c

编辑:

更新:

我决定在我的Win8电脑上试用这段代码,我意识到我的问题中至少有一个是一些垃圾,但现在我稍微编辑了一下。在Windows上,我有MinGW,当我尝试将o文件编译为可执行文件时,它会写入不同的消息:

c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.tex
t.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

我没有完全遵循你的逻辑,这里有一些可能的问题:

首先,你从哪里获得路径;这个程序使用命令行参数可能比使用命令行参数更简单

这意味着您在主文件中声明main,如下所示: int main(int argc,char*argv[])

在这种形式中,argc是传递的参数数,包括文件名,argv[0]是保存文件名的字符串

因此,与其依赖程序为您生成文件,不如这样做:

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main( int argc, char *argv[] ) {
  if (argc != 3) {
    fprintf( stderr, "Usage: %s %s\n", argv[0], "input_file output_file" );
    fprintf( stderr, "Do not add an extension to output_file.\n" );
    return EXIT_FAILURE;
  }
  unsigned int i = 0;
  for (i = 0; i < strlen( argv[2] ); i++) {
    if (argv[2][i] == '\n' || argv[2][i] == '\0') {
      argv[2][i] = '\0';
      break;
    }
  }
  char format_string[150];
  sprintf( format_string, "gcc.exe -Wall -Wextra -c %s -o %s.o", argv[1], argv[2] );
  char format_string2[150];
  sprintf( format_string2, "gcc.exe %s -o %s.exe", argv[1], argv[2] );
  system( format_string );
  system( format_string2 );
  return EXIT_SUCCESS;
}
#包括“stdlib.h”
#包括“stdio.h”
#包括“string.h”
int main(int argc,char*argv[]){
如果(argc!=3){
fprintf(标准,“用法:%s%s\n”,argv[0],“输入文件输出文件”);
fprintf(stderr,“不要向输出_文件添加扩展名。\n”);
返回退出失败;
}
无符号整数i=0;
对于(i=0;i
使用上述程序,您只需创建输入文件,然后将inpu文件作为第一个参数传递,并将输出传递给第二个参数。这个文件有两个假设:输入文件存在,gcc的路径在环境的path变量中


最后,别忘了main不需要原型。

与您的问题无关,但为什么代码在指针数组中?如果你把它放在一个数组中,比如
charmsg[]=“…”,会不会更容易些?关于您的问题,您是否检查了输出文件?你试过手动编译吗?谢谢,我对所有数组都有点困惑,我已经解决了,但问题还是一样的。是的,我在很多方面手动尝试过,如果我使用-c,它会创建一个对象文件,但我仍然无法将其编译为可执行文件。可能是由
system
生成的shell使用的路径与普通shell中的路径不同,因此,
system
调用的
gcc
命令与手动执行它调用的命令不同。这是我的猜测,但我如何才能找出它的不同之处?如果我使用
printf()
echo
将其写出来,它看起来与我写的内容完全相同,即使我将其复制出来并手动使用
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.tex
t.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main( int argc, char *argv[] ) {
  if (argc != 3) {
    fprintf( stderr, "Usage: %s %s\n", argv[0], "input_file output_file" );
    fprintf( stderr, "Do not add an extension to output_file.\n" );
    return EXIT_FAILURE;
  }
  unsigned int i = 0;
  for (i = 0; i < strlen( argv[2] ); i++) {
    if (argv[2][i] == '\n' || argv[2][i] == '\0') {
      argv[2][i] = '\0';
      break;
    }
  }
  char format_string[150];
  sprintf( format_string, "gcc.exe -Wall -Wextra -c %s -o %s.o", argv[1], argv[2] );
  char format_string2[150];
  sprintf( format_string2, "gcc.exe %s -o %s.exe", argv[1], argv[2] );
  system( format_string );
  system( format_string2 );
  return EXIT_SUCCESS;
}