2013-11-18 3 views
0

Я в тупике на этом.конкретная ошибка LNK2001 с boost :: filesystem и VC++ 2010

У меня есть код кроссплатформы, который я пытаюсь скомпилировать с помощью Win7 x64. В коде используется Boost 1.54.0, в частности библиотека boost :: filesystem.

Подавляющее большинство моих кодов компилируется, за исключением нескольких вызовов функций при попытке назначить строки файловой системе :: path.

Например, если бы я сделать что-то же просто, как:

string path = (char *)"/This/Is/A/Fake/Path"; 
filesystem::path boostpath = path; 

Я получаю следующее на стадии ссылка:

LNK2001: unresolved external symbol "void __cdecl boost::filesystem::path_traits::convert(unsigned short const *,unsigned short const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::codecvt<unsigned short,char,int> const &)" ([email protected][email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) 

Я понятия не имею, что является причиной этого. Другие библиотеки ускорений (и вызовы файловой системы) работают просто отлично! Единственное, что я могу придумать, это что-то происходит с Wide Characters и Windows. Поиск вокруг stackoverflow не нашел ничего, что я могу найти. Сама ошибка связи связана с преобразованием строк.

Естественно, это работает на Linux/MacOSX.

Заранее благодарен!

Боб.

+2

Где у вас есть библиотеки Boost, которые вы используете? У этого пакета были встроенные библиотеки для VC 10 или вы сами их создали? Правильно ли настроен проект для поиска в библиотеке (который должен быть .lib-файлом с 'boost_filesystem-vc100' где-то в названии). –

+0

Кроме того, я не уверен, но это может иметь какое-то отношение к опции '/ Zc: wchar_t-' для компилятора MSVC (который отключает встроенную поддержку 'wchar_t').Когда используется '/ Zc: wchar_t-', 'wchar_t' будет typedef для' unsigned short' (при условии, что соответствующий заголовок включен). –

+0

Привет, Майкл! Я сам скомпилировал библиотеку boost, предназначенную для MSVC 10.0 - (libs соответствует тому, что вы описали.) Я настроил пакет, используя предписанные методы на boost.org. ---- Итак, в двух словах, я должен скомпилировать boost без этого флага? Я попробую сегодня. Странно, что этот флаг неправильно установлен bjam или бутстрапом. Вы считаете, что это основное требование для использования путей внутри Windows. –

ответ

1

Наконец-то я получил импульс для работы с переключателем/Zc: wchar_t-. Это связано с редактированием файла msvc.jam. Этот файл находится в папке источника ускорения.

Путь: ваш-наддув-путь /boost_1_54_0/tools/build/v2/tools/msvc.jam

Я искал wchar_t, который объявился в /Zc: wchar_t флаг. Я изменил флаг, изменив его на /Zc: wchar_t-.

Обновленная линия выглядит следующим образом:

toolset.flags $(toolset).compile CFLAGS $(conditions) : /Zc:forScope /Zc:wchar_t- ; 

Я скомпилирован импульс с помощью следующей командной строки. (Я использовал эти флаги специально для моих нужд.)

bjam --toolset=msvc-10.0 architecture=x86 threading=multi link=static address-model=64 --build-type=complete install --prefix=C:\local\boost 

После компиляции, я дал мой проект выстрел, и это, кажется, работает! Я еще не провел серьезных испытаний, но, похоже, компилируется.

Примечание: при перестановке флага wchar_t в много предупреждений компилятора и нескольких сбоев. Хотя я не использую каждый пакет, который стимулирует предложения, я надеюсь, что те, которые мне нужны, в порядке.

Bob ..

+0

Интересно - мне никогда не приходилось это делать. Возможно ли, что ваш проект, который использует Boost, имеет параметр '/ Zc: wchar_t-'? Если вы используете проект IDE для сборки, то в VS IDE он отображается в свойствах проекта C++ в качестве «Язык | Обработайте wchar_t как встроенный тип ». По умолчанию он имеет значение« Да »('/Zc: wchar_t') с по крайней мере VS2008. –

+0

Привет, Майкл. Действительно, проект, над которым я работал, требует флаг/Zc: wchar_t- Это была основная причина проблемы. К сожалению, это устаревшая проблема, и я не могу переключиться на более традиционную/Zc: wchar_t. –