【问题标题】:static library linkage failure in visual cVisual c中的静态库链接失败
【发布时间】:2012-11-25 11:24:06
【问题描述】:

在 Visual c++ 中,我创建了一个包含两个文件 myLib.h 和 myLib.cpp 的静态库。我还有一个控制台应用程序项目,其中包含引用此库的文件 testSequence.cpp。 在 myLib.h 中,我定义了一个类 template<class prec> class sequence,它具有函数声明 prec *getPrimes(int numToGet),然后在 myLib.cpp 中定义此函数。但是,当我构建 testSequence 时,有一个链接错误,它说error LNK2019: unresolved external symbol "public: int * __thiscall mathLib::sequence<int>::getPrimes(int)" (?getPrimes@?$sequence@H@mathLib@@QAEPAHH@Z) referenced in function "char * __cdecl codeString(char *,char *,bool)" (?codeString@@YAPADPAD0_N@Z) 所以,是的,帮助会很好。

【问题讨论】:

    标签: c++ visual-c++ static-libraries static-linking


    【解决方案1】:

    阅读this 了解错误的解释。

    基本上,您尝试做的事情无法完成。当编译器尝试为给定的模板类型参数实例化类模板时,它必须能够看到类模板的实现。您需要将所有成员函数的实现移动到头文件中。

    【讨论】:

    • 废话,我害怕这个。但这不是一个足够流行的框架,可以解决一些问题吗?谢谢!
    • @bathtub 恐怕不行,export 是 C++98 解决这个问题的方法,但是从 C++11 中去掉了。您可以使用 C++11 的 extern templates 获得一些有限的功能。您可能能够为您的 cpp 文件中的某些类型集显式实例化 sequence;然后在库用户的源文件中将该类型声明为 extern 模板。不知道这是否可行。
    • 删除模板似乎是我使用的最佳解决方案,无论如何谢谢。
    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多