在c ++中链接多个目标文件但没有输出

时间:2012-06-22 14:43:56

标签: c++ linker g++

我是c ++编程的新手,并且了解c ++的基础知识。我试图链接三个文件,但我无法得到输出。我正在研究书籍c ++ cookbook现在

假设我们有a.hpp a.cpp,b.hpp b.cpp,c.hpp c.cpp文件,其代码如下:

a.hpp

#ifndef A_HPP_INCLUDED
#define A_HPP_INCLUDED
void a();
#endif

a.cpp

#include "a.hpp"
#include <iostream>
void a()
{
    std::cout<<"a \n ";
}

b.hpp

#ifndef B_HPP_INCLUDED
#define B_HPP_INCLUDED
void b();
#endif

b.cpp

#include "b.hpp"
#include <iostream>
void b()
{
    std::cout<<"b \n ";
}

c.hpp

#ifndef C_HPP_INCLUDED
#define C_HPP_INCLUDED
void c();
#endif

c.cpp

#include "a.hpp"
#include "b.hpp"
#include "c.hpp"
void c()
{
    a();
    b();

}

int main()
{
    c();
    return 0;
}

我已经在一个文件夹中创建了所有文件,我用来编译和链接它们的命令是

$:g++ -c -Wall a.cpp b.cpp c.cpp
$:g++ -o -Wall a.o b.o c.o
$:./a.out

我期待着外出

a
b

但根本没有输出。请大家帮忙解决这个问题。

2 个答案:

答案 0 :(得分:3)

-o命令行中删除g++

您目前正在告诉g++将您的对象链接到一个名为-Wall的文件。因此,替代解决方案是拨打./-Wall而不是./a.out

由于字符串中的空格(" \n ""\n"),您仍然无法获得准确的预期输出。您也可能想要替换:

std::cout << "something \n";

std::cout << "something" << std::endl;

如果您想立即在屏幕上显示数据(刷新)。另请参阅C++: “std::endl” vs “\n”

答案 1 :(得分:0)

$:g++ a.o b.o c.o -o your_output_program_name -Wall

尝试使用此命令。你肯定会让所有事情都正常工作