开发者

Visual Studio 2008 c++ linker refuses to link?

I am banging my head against a wall here.

All i want is to link a static .lib file in a cpp windows forms application! So, i have an include folder in my project folder that holds header files for that .lib (lib is Yaml-cpp if someone wonders). And i have a lib folder that has the .lib files for that library.

I tested it on a blank project

1.I make a new windows forms project in VS2008, in C++.

2.I go to project properties - c/c++ general and additional include directories that have yaml-cpp header files

3.I go to linker and add path to my lib directory

4.I go to linker - input and add my .lib file

5.I check linker command line and it contains my .lib file so it must be all set.

6.Then i write the sample code in an onbutton function body (which appears in form1.h fie).

Sample code is from here http://code.google.com/p/yaml-cpp/wiki/HowToParseADocument and its just as simple as:

#include <fstream>
#include "yaml.h"

and then:

std::ifstream fin("test.yaml");
YAML::Parser parser(fin);

YAML::Node doc;
while(parser.GetNextDocument(doc)) {
    //do nothing yet
}

7.And then i compile and have 10 "unresolved externals".

I have looked into another project that uses same library, and it has exactly same directory structure, same name of .lib added in linker - input - additional dependencies, same .lib and .h files. And it works for that project- but it doesnt work for me.

What in the world is wrong?

EDIT: I tried making new windows 32 console application and it worked correctly. I then tried to make another fresh windows f开发者_开发技巧orms application and it failed.

It is confirmed now. Same steps for linking a library work in console application and fail in windows forms application. WHY?


What you've done seems correct from your explanation, let's do some blind troubleshooting.

  1. Try giving full path instead of relative path for library path and additional include directories. (but as u said that the file is getting read, that should be the problem.)
  2. If you are using a copy of original libyaml-cppmdd.lib and its include file, check whether the header file that gets included is of the same version as the lib.
  3. Check whether there are any functions in any part of the code that is having a declaration but no definition.
  4. Check whether you're accessing any private functions from the library.

Please read this Microsoft article on Troubleshooting UnResolved External Symbol error.

Hope it helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜