如何解决如何解决复杂项目中未定义的引用?
我有一个复杂的项目,它由各种子目录中的源文件组成,这些文件被编译并归档到 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
中函数的调用者位于 libCommon
、libKernel
以及主目录 (EventChecker.o
) 中。
令人困惑的是,libCommon
中还有其他函数也有模板(并从不同的文件中调用),但它们不会导致任何“未定义引用”消息。
那么是否有一些规则可以帮助我避免这些消息?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。