我正在尝试在linux下编译简单的程序。这些是我执行的一组操作。
[mypc@localhost programs]$ vim heap.cpp
[mypc@localhost programs]$ g++ -c heap.cpp
[mypc@localhost programs]$ chmod 777 heap.*
[mypc@localhost programs]$ g++ -c heap.cpp
[mypc@localhost programs]$ ./heap.o
bash: ./heap.o: Permission denied
[mypc@localhost programs]$ ls
heap.cpp heap.o
[mypc@localhost programs]$ ls -l
total 8
-rwxrwxrwx. 1 mypc mypc 67 2009-12-28 12:01 heap.cpp
-rw-rw-r--. 1 mypc mypc 1548 2009-12-28 12:02 heap.o
[mypc@localhost programs]$ chmod 777 heap.o
[mypc@localhost programs]$ ./heap.o
bash: ./heap.o: cannot execute binary file
[mypc@localhost programs]$ 这是什么类型的错误?
这是一个程序
#include<iostream>
using namespace std;
int main(){
return 0;
}发布于 2009-12-28 10:41:18
-c选项告诉编译器生成目标文件,而不是最终的二进制文件。你仍然需要链接你的代码。
如果您只有一个文件,则可以在一个步骤中执行编译和链接:
g++ heap.cpp -o heap当你进入更大的程序时,你会想要把编译和链接分开。假设您想在heap.cpp和main.cpp之间拆分代码。首先,您将执行编译步骤,然后将它们链接在一起:
g++ -c heap.cpp
g++ -c main.cpp
g++ -o program_name heap.o main.o最后,默认情况下,链接步骤会创建一个名为a.out的文件。如果您希望指定名称,请确保使用-o选项(编译时不需要该选项,因为缺省设置是将NAME.EXTENSION转换为NAME.o)。
发布于 2009-12-28 10:40:07
这意味着您生成的文件不是可执行文件。
您可以使用链接器(ld),或者在一个步骤中编译和链接(首选)。
要执行后一种操作:
g++ -o <output name> -I/include/page -Llibpath -llibone -llibtwo source1.cpp source2.cpp这将生成一个可执行文件,其中链接了运行所需的所有内容。
发布于 2009-12-28 10:48:17
正如其他人所说,您需要编译和链接您的C++程序才能运行。您可以这样对GCC执行此操作:
g++ -o heap heap.o编译和链接步骤在C和C++中都存在。
您还需要设置适当的权限才能运行您的文件。假设您的程序编译和链接都没有错误,您应该得到一个具有适当权限的二进制文件,它应该如下所示:
[mypc@localhost programs]$ ls -l
-rwxrwxrwx. 1 mypc mypc 67 2009-12-28 12:01 heap.cpp
-rw-rw-r--. 1 mypc mypc 1548 2009-12-28 12:02 heap.o
-rwxrwxr-x. 1 mypc mypc 1548 2009-12-28 12:02 heap左边的字母代表读、写或执行。第一组三个用于文件的所有者(名为mypc),下一组三个用于文件的组所有者(也名为mypc,但是一个单独的实体),最后三组用于这些文件所在的文件系统的所有其他用户(也称为"the world")。
如果您没有设置执行位,可以在Unix中使用以下命令设置它:
chmod o+x heap这将为所有者添加execute位。
有了上面的介绍,您可能希望这样做,以便从C++源代码中删除execute位:
chmod a-x heap.cpp. 你的C++程序的源代码没有理由是可执行的。
https://stackoverflow.com/questions/1967762
复制相似问题