我试图使用 this tutorial 中的代码构建我自己的静态库 (.lib) .但首先,静态库项目会自动为我生成一个stdafx.h,一个targetver.h和一个stdafx.cpp,所以我必须在所有源文件中包含 stdafx.h。但是一旦我这样做了,该项目仍然拒绝编译,因为现在它认为 YJMagic 不是类或命名空间名称。然后我检查了项目的属性,发现stdafx.h已经是我的预编译头文件了。所以也许它不会编译,因为存在双重包含问题?
然后因为想不出解决办法,我换了一种方式:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名更改为.lib,并将配置类型更改为static library(.lib).(在properties->configuration properties->general),然后点击build,aaaaa成功了!!!!我写了一个小的测试脚本来证明 lib 工作正常......所以我看到静态库项目错了吗?不知道有没有人遇到同样的问题或者谁能解释一下?
不想打开tuto链接的 friend ,源码在下面:
#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>
关于c++ - 无法用visual studio 2017编译静态库项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48565257/