当我想运行源代码时,为什么会这样:
gcc test.c -o test.o
Run Code Online (Sandbox Code Playgroud)
然后
./test.o
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
gcc -c test.c
Run Code Online (Sandbox Code Playgroud)
然后
./test.o
Run Code Online (Sandbox Code Playgroud)
并得到这个消息
bash: ./test.o: Permission denied
Run Code Online (Sandbox Code Playgroud)
首先,您不是创建目标文件而是创建可执行文件.目标文件是一个中间文件,用作链接器创建可执行文件的输入文件.用.o后缀命名它并不重要.
其次,由于传统,如果你没有使用-o选项指定输出文件名,编译器前端程序和链接器将创建一个名为的可执行文件a.out.
但这不是全部,因为在第二个例子中,您实际上是在创建一个真实的目标文件,而这些文件不可执行.如上所述,需要将这些传递到单独的链接步骤以创建可执行文件.
您需要创建一个可执行文件:
gcc test.c
./a.out
Run Code Online (Sandbox Code Playgroud)
或者您应该将目标文件链接到可执行文件:
gcc -c test.c # Create object file
gcc test.o -o test # Use object file to create executable file
./test # Run the executable file
Run Code Online (Sandbox Code Playgroud)