如何使用extern在G ++中编译多个文件

Nayana adassuriya

我正在做一些关于外部按键的实验,目前正在使用Fedora 19和g ++。我试图编译多个c ++文件并执行程序。在这里,它编译成功。但是当尝试运行它时会显示Permission denied错误。我更改为使用chmod777的权限。但结果仍然相同。然后我尝试编译并运行一个简单的Hello World程序,效果很好。我的程序怎么了?

test1.h

int a=0;

test2.h

#include <iostream>
using namespace std;

extern int a;    
void foo()
{
 cout << "This is a test string " << endl;
 cout << a << endl;
}

int main()
{
 foo();
}

这是我编译和Terminal执行结果的方式

[root@localhost cpp]# g++ test1.h test2.h -o test.o
[root@localhost cpp]# ./test.o
bash: ./test.o: Permission denied
[root@localhost cpp]# 
亚当·罗森菲尔德

你有几个问题。如果使用该file(1)实用工具检查输出文件,您将了解为什么无法执行该文件:

$ file test.o
test.o: GCC precompiled header (version 013) for C++

预编译的头文件不是有效的可执行文件,它们不是有效的ELF文件,也​​不是带有短行的脚本文件,它们只是编译器知道如何读取的数据文件。

为什么会得到预编译的头文件?因为您要让g ++编译头文件(个.h文件)。为您的C ++源文件.h扩展名真的很荒谬,因为它们不是头文件,而是源文件。给他们适当的.cc.cpp扩展,和g ++将正确编译他们的可执行文件。

其次,为什么要给输出文件命名test.o.o用于对象文件(单个源文件的编译版本,而不是完整的可执行文件),但是您要让g ++编译完整的可执行文件。如果只想编译而不是链接,则传递该-c标志,然后手动将目标文件链接在一起。不要使用来命名可执行文件.otest这是从名为的源文件编译的可执行文件的更合适的名称test.cc,但我要避免这样做,并建议使用其他test名称,因为它也是shell内置函数的名称

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在cython中编译多个文件

如何在cuda中编译多个文件?

如何在OCaml中编译多个文件?

如何使用Makefile在目录中编译多个单独的C文件?

使用g ++或CC编译多个C ++文件

如何在单个命令中编译多个原型文件?

如何在线编译cobol中的多个文件?

使用多个 .cpp 文件替代 C++ 中的条件编译

如何编译多个SML文件?

如何在D中的不同文件夹中编译多个文件?

如何使用gcc / g ++编译多个cpp文件头文件?

使用G ++编译多个.cpp和.h文件

如何使用 vscode 在 c 中调试“extern”

使用cffi编译多个源文件

使用 Makefile 高效编译多个测试文件

如何在单个Excel工作表中编译多个.txt文件?

无法理解如何在多个文件中编译go代码

如何在LINUX Shell上的Java中编译多个类文件?

如何将多个Rust文件编译到单个C库中?

Solidity:如何在compile.js文件中编译多个智能合约?

在macOS上使用clang ++在Visual Studio Code中编译多个.cpp文件

如何使用多个 tsconfig 文件(编译器选项冲突)?

gcc如何编译多个源文件以在GDB中使用?

如何在使用 g++ 和 gcc 编译 obj 文件的 Makefile 中避免循环依赖?

如何使用grunt-sass将多个scss文件编译成多个css文件?

在多个文件中使用模块时,无法编译项目:“导入只能引用通过--extern传递的外部板条箱名称”

使用g ++编译多个.cpp和.h文件。我做对了吗?

如何编译由多个文件组成的Go程序?

Gulp:如何创建可编译多个SASS文件的任务?