在静态库中包含 STL
Including STL in static libraries
我已经用下面的文件 alien.h 和 alien.cpp 创建了一个静态库。该库 link 由文件 user.cpp 编辑。如果删除带有注释的行,则代码编译 links,并按预期运行。事实上,库和程序可以编译,但程序不会 link。 MSVC2015RC 生成超过 100 个关于 std::numeric_limits
已经被定义的错误。
是否有一些我应该注意的设置,或者这是一个 MSVC2015 错误?
文件alien.h
#include <vector> // This line causes troubles.
struct alien
{
const int * const value;
};
extern alien meh;
文件alien.cpp
alien meh { 7 };
文件user.cpp
#include "alien.h"
#include <iostream>
#pragma comment(lib, "alien.lib")
int main()
{
wcout << meh.value;
return 0;
}
Error LNK2005 "public: static int const std::numeric_limits::max_exponent" (?max_exponent@?$numeric_limits@M@std@@2HB) already defined in alien.obj
是bug!相同的 library/program 在未启用语言扩展的情况下在 MSVC2013 下编译。在 MSVC2015 中,必须启用语言扩展。
我已经用下面的文件 alien.h 和 alien.cpp 创建了一个静态库。该库 link 由文件 user.cpp 编辑。如果删除带有注释的行,则代码编译 links,并按预期运行。事实上,库和程序可以编译,但程序不会 link。 MSVC2015RC 生成超过 100 个关于 std::numeric_limits
已经被定义的错误。
是否有一些我应该注意的设置,或者这是一个 MSVC2015 错误?
文件alien.h
#include <vector> // This line causes troubles.
struct alien
{
const int * const value;
};
extern alien meh;
文件alien.cpp
alien meh { 7 };
文件user.cpp
#include "alien.h"
#include <iostream>
#pragma comment(lib, "alien.lib")
int main()
{
wcout << meh.value;
return 0;
}
Error LNK2005 "public: static int const std::numeric_limits::max_exponent" (?max_exponent@?$numeric_limits@M@std@@2HB) already defined in alien.obj
是bug!相同的 library/program 在未启用语言扩展的情况下在 MSVC2013 下编译。在 MSVC2015 中,必须启用语言扩展。