Visual c++ Visual Studio 2008 c++;链接器拒绝链接?

Visual c++ Visual Studio 2008 c++;链接器拒绝链接?,visual-c++,linker,static-libraries,static-linking,Visual C++,Linker,Static Libraries,Static Linking,我的头撞在这里的墙上 我只想在cpp windows窗体应用程序中链接一个静态.lib文件!所以,我的项目文件夹中有一个include文件夹,其中保存了该.lib的头文件(如果有人想知道的话,lib是Yaml cpp)。我有一个lib文件夹,其中包含该库的.lib文件 我在一个空白项目上测试了它 < 1 >我在VS2008中用C++编写了一个新的Windows窗体项目。 2.我转到项目属性-c/c++general和其他包含有yaml cpp头文件的目录 3.我转到链接器并将路径添加到我的lib

我的头撞在这里的墙上

我只想在cpp windows窗体应用程序中链接一个静态.lib文件!所以,我的项目文件夹中有一个include文件夹,其中保存了该.lib的头文件(如果有人想知道的话,lib是Yaml cpp)。我有一个lib文件夹,其中包含该库的.lib文件

我在一个空白项目上测试了它

< 1 >我在VS2008中用C++编写了一个新的Windows窗体项目。 2.我转到项目属性-c/c++general和其他包含有yaml cpp头文件的目录

3.我转到链接器并将路径添加到我的lib目录

4.我转到linker-input并添加我的.lib文件

5.我检查了链接器命令行,它包含我的.lib文件,所以它必须全部设置

6.然后我在一个onbutton函数体(出现在form1.h fie中)中编写示例代码

示例代码如下所示:

#include <fstream>
#include "yaml.h"
7.然后我编译了10个“未解决的外部问题”

我研究了另一个使用相同库的项目,它有完全相同的目录结构,在linker-input-additional dependencies中添加了相同的.lib名称,以及相同的.lib和.h文件。它对那个项目有效,但对我无效

到底怎么了

编辑:我尝试制作新的Windows32控制台应用程序,它工作正常。然后,我尝试创建另一个新的windows窗体应用程序,但失败了


现在已经证实了。链接库的步骤在控制台应用程序中有效,在windows窗体应用程序中失败。为什么?

从您的解释来看,您所做的似乎是正确的,让我们做一些盲目的故障排除

  • 尝试为库路径和其他包含目录提供完整路径而不是相对路径。(但正如你所说,文件正在被读取,这应该是问题所在。)
  • 如果您使用的是原始
    libyaml cppmdd.lib
    及其包含文件的副本,请检查包含的头文件是否与该库的版本相同
  • 检查代码的任何部分中是否有声明但没有定义的函数
  • 检查您是否正在访问库中的任何私有函数
  • 请在上阅读这篇Microsoft文章


    希望有帮助

    请包含特定的链接器错误消息?(我最初的猜测是.lib引用了其他的.lib,而你还没有将它们全部包含在你的链接器设置中)是的,尽管它们很大。。。。为了澄清,我检查了另一个C++项目,它使用相同的库,它除了链接一个LIB我还链接什么(YAML CPPP.LIB)。还有另一个yaml-cpp.lib文件,但它没有被该项目链接,而且该项目运行得很好。。。链接第二个库无论如何都没有帮助1>test_yaml_cpp.obj:error LNK2028:unresolved token(0A000036)“public:bool\u clrcall yaml::Parser::GetNextDocument(类yaml::Node&)”(?GetNextDocument@Parser@YAML@$$FQAM_NAAVNode@2@@Z) 在函数“private:void\u clrcall test\u yaml\u cpp::Form1::button1\u Click”中引用(类系统::对象^,类系统::事件参数^)”(?按钮1_Click@Form1@测试\u yaml\u cpp@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) 1>test_yaml_cpp.obj:错误LNK2028:未解析令牌(0A000037)“public:u clrcall yaml::Node::~Node(void)”(??1Node@YAML@@$$FQAM@XZ)在函数中引用“private:void\u clrcall test\u yaml\u cpp::Form1::button1\u单击(类系统::对象^,类系统::事件参数^)”(?按钮1_Click@Form1@测试\u yaml\u cpp@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) 1>test_yaml_cpp.obj:错误LNK2028:未解析令牌(0A000038)“public:u clrcall yaml::Node::Node(void)”(?)??0Node@YAML@@$$FQAM@XZ)在函数“private:void\u clrcall test\u yaml\u cpp::Form1::button1\u Click(类系统::对象^,类系统::事件参数^)”中引用(?button1_Click@Form1@测试\u yaml\u cpp@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)是的,问题是Win32控制台应用程序使用相同的库,相同的路径,相同的包含文件!但windows窗体应用程序不工作(相同的路径,相同的包含文件,执行相同的示例代码)。所以我们可以将1,2,3,4删除为不相关:(因为它们都“通过”在win 32控制台应用程序中。windows窗体应用程序一定有问题吗?请检查您是否正在使用任何win32库。尝试包括
    。右键单击项目、属性、链接器、输入。从附加依赖项设置中删除$(NoInherit)。如果您使用VS2010,请放入“user32.lib”也可以尝试将/clr模式设置为正常(普通/clr模式),如果这些都不起作用,请尝试将库函数声明嵌套在包含文件中。(可能是我的箭图中的最后一个箭头:D)
    std::ifstream fin("test.yaml");
    YAML::Parser parser(fin);
    
    YAML::Node doc;
    while(parser.GetNextDocument(doc)) {
        //do nothing yet
    }