在 g++ 5 上编译 windows c++ 项目时出现问题

Problems compiling windows c++ project on g++ 5

我在 Visual Studio 2013 年内在 Windows 机器上成功创建和编译的 C++ 项目遇到了问题。目前我正在将源代码迁移到 Unix 平台(我的问题已在 Mac 和 CentOs 上得到确认)。我的项目依赖于 OpenMP(多线程支持)库。因此 Apples LLVM 编译器(版本 6.0)不充分支持 OpenMp 我决定使用 g++-5.

编译我的项目

在从 windows 编译器转移到 GNU 的 gcc/g++ (Homebrew gcc 5.2.0) 时处理了一些语法错误后,我在链接过程中遇到了以下问题:

链接器找不到我的体系结构的符号,并列出了几乎所有由我创建和包含的 class/object - 奇怪的是,它没有列出我的每个 classes/object.

我正在使用此命令进行编译:

g++-5 myProject.cpp -o myProject -fopenmp -std=c++11 -L/usr/local/lib -I/usr/local/Cellar/libiomp/20150701/include/libiomp -Wall

我在编译器调用中是否遗漏了一些愚蠢的东西?我的链接器问题的原因是什么? 如上所述,同样的问题也发生在 Mac 和 CentOs 上。

编辑 (根据一些评论): 根据 this question,我已经激活了所有警告标志,编译器对我的代码非常满意。但是链接器说的是:

  Undefined symbols for architecture x86_64:
  "FileHelper::createFileName[abi:cxx11](char const*, char const*)", referenced from:
      _main in ccZAvFqT.o
  "Statistics::writeStats(char const*)", referenced from:
      _main in ccZAvFqT.o
  "Statistics::newSimulationRun()", referenced from:
      _main in ccZAvFqT.o
  "Statistics::newSimulationIteration()", referenced from:
      _main in ccZAvFqT.o
  "Statistics::Instance()", referenced from:
      _main in ccZAvFqT.o
  "Statistics::writeAvg()", referenced from:
      _main in ccZAvFqT.o
  "Statistics::~Statistics()", referenced from:
      _main in ccZAvFqT.o
  "GraphHelper::Graph::writeGraph(std::vector<IPeer*, std::allocator<IPeer*> >*, std::vector<Connection*, std::allocator<Connection*> >*)", referenced from:
[...] and so on and so on...

当您从命令行编译时,您需要确保在 link 可执行文件时包含所有目标文件 (.o)。

显然,这很难手动控制,这就是为什么人们发明了各种 Makefile 来为他们做这件事。你可以研究这个话题。为了解决您眼前的问题,只需确保您的所有 cpp 文件都列在命令行中以供编译。像

g++ myProject.cpp Statistics.cpp ... <flags>  -o <executable>