微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决复杂项目中未定义的引用?

如何解决如何解决复杂项目中未定义的引用?

我有一个复杂的项目,它由各种子目录中的源文件组成,这些文件被编译并归档到 libXXX.a 文件中。 这编译和链接得很好。

我现在将新文件 stdstrutils.cpp(连同其头文件 stdstrutils.h添加到“common”子目录中的子项目中。

这个文件包含一个带有普通模板的函数

template<typename T> bool strToNum(const std::string sData,T *t);

一个带有可变参数模板,

template<typename... Args> std::string stdsprintf(const std::string sForma,Args... args);

(头文件中的声明与 c++ 文件中的函数完全匹配) 这些函数由各个子目录中的四个 c++ 文件使用。

我在所有使用 #include "stdstrutils.cpp" 模板化函数文件中的 #includes 中添加stdstrutils 行,但我仍然从链接器中收到很多“未定义引用”消息。都与 stdstrutils 中的模板函数有关。

stdstrutils代码肯定链接到库 libCommon.a 中:我用测试程序检查了这一点 - 它编译和链接没有任何抱怨,并按预期执行。

这是来自生成文件链接命令:

 ~/utils/cgcc -fopenmp -std=c++11 -Wall -g  -o QHGMain \
  QHGMain.o Simulator.o SimParams.o EventChecker.o GridScrambler.o \
  -L ../populations -lPopulations \
  -L ../genes -lGenes \
  -L ../kernel -lKernel \
  -L ../modular -lModular \
  -L ../qmaps -lQMap \
  -L ../icosa -lIcosa \
  -L ../geoinfo -lGeoInfo \
  -L ../common -lCommon \
  -L ../io -lIO \
    -lz -lhdf5 -lm -lcrypto 

stdstrutils函数调用者位于 libCommonlibKernel 以及主目录 (EventChecker.o) 中。

令人困惑的是,libCommon 中还有其他函数也有模板(并从不同的文件调用),但它们不会导致任何“未定义引用”消息。

那么是否有一些规则可以帮助我避免这些消息?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。