无法编译带有visual studio 2017 的静态库项目
Can't compile the static library project with visual studio 2017
我试图使用 this tutorial 中的代码构建我自己的静态库 (.lib)。但是首先,静态库项目会生成一个stdafx.h,一个targetver.h和一个 stdafx.cpp 自动为我提供,所以我必须在所有源文件中包含 stdafx.h。但是一旦我这样做了,该项目仍然拒绝编译,因为现在它认为 YJMagic 不是 class 或命名空间名称 。然后我检查了项目的属性,发现 stdafx.h 已经是我的预编译头文件了。所以也许它不会编译,因为存在双重包含问题?
然后因为想不出解决办法,我换了个办法:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名改为.lib,配置类型到静态库(.lib)。(在properties->configuration properties->general),然后点击构建,aaaaa 成功了!!!!我写了一个小的测试脚本来证明 lib 工作正常......所以我看到静态库项目错了吗?不知道有没有人遇到同样的问题或者谁能解释一下?
不想打开link教程的朋友,源码在下面:
#pragma once
// YJMagic.h
namespace YJMagic
{
class YJMagic
{
public:
// Returns a + b
static double Add(double a, double b);
};
}
// YJMagic.cpp
#include "YJMagic.h"
#include <stdexcept>
using namespace std;
namespace YJMagic
{
double YJMagic::Add(double a, double b)
{
return a + b;
}
}
提前感谢您的回答!祝你有美好的一天;)
参考更新
以下 solution 在 VS 2017 C++ 中为我工作:
这是编译器的一个讨厌的怪癖。当它搜索预编译头文件时,它会跳过 stdafx.h
之前的所有 #includes。让它看起来像这样来解决你的问题:
#include "stdafx.h"
#include <iostream>
作为您不想使用 stdafx 时的解决方法:
删除有问题的包含,然后进入项目的属性。
下C/C++
下预编译Headers
将预编译Header设置为不使用预编译Header
这会阻止它寻找预编译的 header,您可以继续您的生活 :)
我试图使用 this tutorial 中的代码构建我自己的静态库 (.lib)。但是首先,静态库项目会生成一个stdafx.h,一个targetver.h和一个 stdafx.cpp 自动为我提供,所以我必须在所有源文件中包含 stdafx.h。但是一旦我这样做了,该项目仍然拒绝编译,因为现在它认为 YJMagic 不是 class 或命名空间名称 。然后我检查了项目的属性,发现 stdafx.h 已经是我的预编译头文件了。所以也许它不会编译,因为存在双重包含问题?
然后因为想不出解决办法,我换了个办法:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名改为.lib,配置类型到静态库(.lib)。(在properties->configuration properties->general),然后点击构建,aaaaa 成功了!!!!我写了一个小的测试脚本来证明 lib 工作正常......所以我看到静态库项目错了吗?不知道有没有人遇到同样的问题或者谁能解释一下?
不想打开link教程的朋友,源码在下面:
#pragma once
// YJMagic.h
namespace YJMagic
{
class YJMagic
{
public:
// Returns a + b
static double Add(double a, double b);
};
}
// YJMagic.cpp
#include "YJMagic.h"
#include <stdexcept>
using namespace std;
namespace YJMagic
{
double YJMagic::Add(double a, double b)
{
return a + b;
}
}
提前感谢您的回答!祝你有美好的一天;)
参考更新
以下 solution 在 VS 2017 C++ 中为我工作:
这是编译器的一个讨厌的怪癖。当它搜索预编译头文件时,它会跳过 stdafx.h
之前的所有 #includes。让它看起来像这样来解决你的问题:
#include "stdafx.h"
#include <iostream>
作为您不想使用 stdafx 时的解决方法:
删除有问题的包含,然后进入项目的属性。
下C/C++
下预编译Headers
将预编译Header设置为不使用预编译Header
这会阻止它寻找预编译的 header,您可以继续您的生活 :)