首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux下编译c++程序

问在linux下编译c++程序
EN

Stack Overflow用户
提问于 2009-12-28 10:38:03
回答 5查看 1.4K关注 0票数 0

我正在尝试在linux下编译简单的程序。这些是我执行的一组操作。

代码语言:javascript
复制
[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]$ 

这是什么类型的错误?

这是一个程序

代码语言:javascript
复制
#include<iostream>

using namespace std;
int main(){

        return 0;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-28 10:41:18

-c选项告诉编译器生成目标文件,而不是最终的二进制文件。你仍然需要链接你的代码。

如果您只有一个文件,则可以在一个步骤中执行编译和链接:

代码语言:javascript
复制
g++ heap.cpp -o heap

当你进入更大的程序时,你会想要把编译和链接分开。假设您想在heap.cpp和main.cpp之间拆分代码。首先,您将执行编译步骤,然后将它们链接在一起:

代码语言:javascript
复制
g++ -c heap.cpp
g++ -c main.cpp
g++ -o program_name heap.o main.o

最后,默认情况下,链接步骤会创建一个名为a.out的文件。如果您希望指定名称,请确保使用-o选项(编译时不需要该选项,因为缺省设置是将NAME.EXTENSION转换为NAME.o)。

票数 10
EN

Stack Overflow用户

发布于 2009-12-28 10:40:07

这意味着您生成的文件不是可执行文件。

您可以使用链接器(ld),或者在一个步骤中编译和链接(首选)。

要执行后一种操作:

代码语言:javascript
复制
g++ -o <output name> -I/include/page -Llibpath -llibone -llibtwo source1.cpp source2.cpp

这将生成一个可执行文件,其中链接了运行所需的所有内容。

票数 3
EN

Stack Overflow用户

发布于 2009-12-28 10:48:17

正如其他人所说,您需要编译和链接您的C++程序才能运行。您可以这样对GCC执行此操作:

代码语言:javascript
复制
g++ -o heap heap.o

编译和链接步骤在C和C++中都存在。

您还需要设置适当的权限才能运行您的文件。假设您的程序编译和链接都没有错误,您应该得到一个具有适当权限的二进制文件,它应该如下所示:

代码语言:javascript
复制
[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中使用以下命令设置它:

代码语言:javascript
复制
chmod o+x heap

这将为所有者添加execute位。

有了上面的介绍,您可能希望这样做,以便从C++源代码中删除execute位:

代码语言:javascript
复制
chmod a-x heap.cpp. 

你的C++程序的源代码没有理由是可执行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1967762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档