【发布时间】:2011-08-03 13:06:06
【问题描述】:
我在这里用头撞墙。
我只想在 cpp windows 窗体应用程序中链接一个静态 .lib 文件!因此,我的项目文件夹中有一个包含该 .lib 的头文件的文件夹(如果有人想知道,lib 是 Yaml-cpp)。我有一个 lib 文件夹,其中包含该库的 .lib 文件。
我在一个空白项目上测试过
1.我在 VS2008 中用 C++ 制作了一个新的 windows 窗体项目。
2.我转到项目属性 - c/c++ 常规和其他包含 yaml-cpp 头文件的目录
3.我去链接器并添加我的lib目录的路径
4.我去链接器 - 输入并添加我的 .lib 文件
5.我检查链接器命令行,它包含我的 .lib 文件,所以它必须全部设置。
6.然后我在一个onbutton函数体中编写示例代码(出现在form1.h fie中)。
示例代码来自这里http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument,它很简单:
#include <fstream>
#include "yaml.h"
然后:
std::ifstream fin("test.yaml");
YAML::Parser parser(fin);
YAML::Node doc;
while(parser.GetNextDocument(doc)) {
//do nothing yet
}
7.然后我编译并有 10 个“未解决的外部”。
我查看了另一个使用相同库的项目,它具有完全相同的目录结构,在链接器中添加的 .lib 相同名称 - 输入 - 附加依赖项,相同的 .lib 和 .h 文件。它适用于那个项目——但它不适合我。
这到底是怎么回事?
编辑:我尝试制作新的 Windows 32 控制台应用程序,它工作正常。然后我尝试制作另一个新的 Windows 窗体应用程序,但失败了。
现在已经确定了。在控制台应用程序中链接库的相同步骤在 Windows 窗体应用程序中失败。为什么?
【问题讨论】:
-
请您包含具体的链接器错误消息吗? (我最初的猜测是 .lib 引用了其他 .lib 并且您没有将它们全部包含在链接器设置中)
-
是的,尽管它们很大......为了澄清,我检查了另一个使用相同库的 c++ 项目,除了我也链接的一个库(yaml-cppd.lib)之外,它没有链接任何东西。还有另一个 yaml-cpp.lib 文件,但它没有被该项目链接,并且该项目工作得很好......并且链接第二个库无论如何都没有帮助
-
1>test_yaml_cpp.obj : 错误 LNK2028: 未解析的令牌 (0A000036) "public: bool __clrcall YAML::Parser::GetNextDocument(class YAML::Node &)" (?GetNextDocument@Parser@YAML @@$$FQAM_NAAVNode@2@@Z) 在函数“private: void __clrcall test_yaml_cpp::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)”(?button1_Click@Form1@test_yaml_cpp@ @$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
-
1>test_yaml_cpp.obj : 错误 LNK2028: 未解析的令牌 (0A000037) "public: __clrcall YAML::Node::~Node(void)" (??1Node@YAML@@$$FQAM@ XZ) 在函数“private: void __clrcall test_yaml_cpp::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)”中引用 (?button1_Click@Form1@test_yaml_cpp@@$$FA$AAMXP$AAVObject@ System@@P$AAVEventArgs@4@@Z)
-
1>test_yaml_cpp.obj : 错误 LNK2028: 未解析的令牌 (0A000038) "public: __clrcall YAML::Node::Node(void)" (??0Node@YAML@@$$FQAM@XZ ) 在函数“private: void __clrcall test_yaml_cpp::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)”中引用 (?button1_Click@Form1@test_yaml_cpp@@$$FA$AAMXP$AAVObject@System @@P$AAVEventArgs@4@@Z)
标签: visual-c++ linker static-libraries static-linking