无法使用visual studio 2017编译静态库项目

时间:2018-02-01 14:36:35

标签: c++ include visual-studio-2017 static-libraries

我正在尝试使用this tutorial中的代码构建自己的静态库(.lib)。但首先,静态库项目会自动为我生成 stdafx.h targetver.h stdafx.cpp ,所以我必须在所有源文件中包含stdafx.h。但是一旦我这样做,该项目仍然拒绝编译,因为现在它认为 YJMagic不是类或命名空间名称。然后我检查了项目的属性,发现stdafx.h已经是我的预编译头文件。也许它不会编译,因为存在双重包含问题?

然后因为我无法找到解决方案,我采用了另一种方式:我创建一个空项目,使用相同的源文件和头文件,然后手动将目标扩展名更改为.lib,并配置类型到静态库(.lib)。(在属性 - > 配置属性 - > 一般),然后点击构建,aaaaa和它的工作原理!!!!我写了一个小的测试脚本,证明lib工作正常......所以我看到静态库项目错了吗?我想知道是否有人有同样的问题或有人可以解释?

对于那些不想打开tuto链接的人,源代码如下:

#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;
    }
}

提前感谢您的回答!祝你有愉快的一天;)

使用参考资料进行更新

2 个答案:

答案 0 :(得分:1)

以下solution在VS 2017 C ++中为我工作:
这是编译器的一个令人讨厌的怪癖。当它搜索预编译的头时,它会跳过stdafx.h之前的所有#includes。使其看起来像这样来解决您的问题:

#include "stdafx.h"
#include <iostream>

答案 1 :(得分:0)

作为不希望使用stdafx的解决方法:

删除有问题的包含,然后进入项目的属性。

C / C ++

预编译头文件

预编译头文件设置为不使用预编译头文件

这阻止了它寻找预编译的头文件,您可以继续生活:)