与静态链接的功能混淆

时间:2013-12-06 14:37:44

标签: c++ linker

我不确定以下代码:

.lib项目

Unit.h

namespace mynamespace {

    static void myFunction()
    {
      printf("hello world");
    }

    void myFunction2();
 }

Unit.cpp

#include "Unit.h"

void myFunction2() { printf("hello world"); }

.exe项目

mainapp.cpp

   #include "Unit.h"

   int main()
   {
      mynamespace::myFunction();
      mynamespace::myFunction2();
      return 0;

   }

1)为什么我为myFunction2()获得“未解析的外部符号”?我包括标题,符号在另一个翻译单元中,出了什么问题?

2)静态应该意味着“与内部联系”,这是否意味着mainapp.cpp和unit.cpp都将拥有myFunction的“副本”?

2 个答案:

答案 0 :(得分:8)

您需要在命名空间中实现该功能:

void mynamespace::myFunction2() { printf("hello world"); }

目前,在Unit.cpp中,您正在定义一个不同的函数; 全局命名空间中名为myFunction2的函数

答案 1 :(得分:1)

...在命名空间中实现该功能......

Unit.cpp

namespace mynamespace {
  void myFunction2() { printf("hello world"); }
}