链接

时间:2018-12-04 23:28:29

标签: c++ linux gcc g++

我现在快疯了。似乎gcc有问题,并且无法打开包含文件在链接时找不到函数DoIt()。我尝试在代码块中编译此代码,但该代码无法正常工作,因此我在控制台中使用G ++对其进行了尝试,但仍无法正常工作。所以我认为这是gcc的问题。

这是我的代码

main.cpp

#include <iostream>
#include "source.h"
int main()
{
    std::cout<<"That works"<<std::endl;
    DoIt();
    while(true)
    {
    }
    return 0;
}

source.cpp

#include "source.h"
#include <iostream>

void DoIt()
{
std::cout<<"That works too"<<std::endl; //Currently doesn't work
}     

source.h

void DoIt();

这就是我在终端上写的

g++ main.cpp -std=c++11 -o result

这是我运行它时的错误消息

/tmp/ccG6X4Bw.o: In function `main':
main.cpp:(.text+0x2d): undefined reference to `DoIt()'
collect2: error: ld returned 1 exit status

我不知道为什么它不起作用

1 个答案:

答案 0 :(得分:0)

默认情况下,gcc将尝试编译和链接。没有来自source.cpp的代码的链接将导致链接器无法将DoIt的调用链接到其代码。如果您只想编译,请将-c传递给gcc

在手册页中:

  When you invoke GCC, it normally does preprocessing, compilation, assembly and linking.
  ...
   -c  Compile or assemble the source files, but do not link.
       The linking stage simply is not done.