在g++5上编译windowsc++项目的可视化问题

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

本文关键字:可视化 问题 项目 windowsc++ g++5 编译      更新时间:2023-10-16

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

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

链接器找不到我的体系结构的符号,几乎列出了我创建和包含的每一个类/对象——奇怪的是,它并没有列出我的每个类/对象。

我用这个命令编译:

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上。

编辑(根据一些评论):根据这个问题,我已经激活了所有的警告标志,编译器对我的代码肯定很满意。但链接器是这样说的:

  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...

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

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

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