Компоновщик Visual Studio 2008 c ++ отказывается ссылаться? - PullRequest
0 голосов
/ 03 августа 2011

Я бьюсь головой о стену здесь.

Все, что я хочу, это связать статический файл .lib в приложении cpp для форм Windows!Итак, у меня есть папка include в папке моего проекта, которая содержит заголовочные файлы для этого .lib (lib - это Yaml-cpp, если кто-то задается вопросом).И у меня есть папка lib, в которой есть файлы .lib для этой библиотеки.

Я протестировал ее на пустом проекте

1. Я делаю новый проект Windows Forms в VS2008, на C ++.

2. Я захожу в свойства проекта - общие и дополнительные каталоги c / c ++, содержащие заголовочные файлы yaml-cpp

3. Я иду в компоновщик и добавляю путь к моей директории lib

4. Я захожу на линкер - введите и добавляю мой .lib файл

5. Я проверяю командную строку компоновщика, и он содержит мой .lib файл, поэтому он должен быть полностью установлен.* 6. Затем я пишу пример кода в теле функции кнопки (который появляется в form1.h тьфу).

Пример кода отсюда 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 Form, но оно не удалось.

Теперь это подтверждается.Те же шаги для связывания библиотеки работают в консольном приложении и терпят неудачу в приложении Windows Form.ПОЧЕМУ?

1 Ответ

0 голосов
/ 03 августа 2011

То, что вы сделали, кажется правильным из вашего объяснения, давайте сделаем несколько слепых ошибок.

  1. Попробуйте указать полный путь вместо относительного пути для пути к библиотеке и дополнительные каталоги включения. (но, как вы сказали, что файл читается, это должно быть проблемой.)
  2. Если вы используете копию оригинального libyaml-cppmdd.lib и его включаемый файл, проверьте, имеет ли заголовочный файл, который включается в комплект, ту же версию, что и библиотека.
  3. Проверьте, есть ли какие-либо функции в какой-либо части кода, которая имеет объявление, но не имеет определения.
  4. Проверьте, используете ли вы какие-либо частные функции из библиотеки.

Прочтите эту статью Microsoft по Устранение неполадок, связанных с нерешенной ошибкой внешнего символа .

Надеюсь, это поможет!

...