специфическая ошибка LNK2001 с boost :: filesystem и VC ++ 2010

0

Я в тупике.

У меня есть код кросс-платформы, который я пытаюсь скомпилировать с помощью 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 &)" (?convert@path_traits@filesystem@boost@@$$FYAXPEBG0AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV?$codecvt@GDH@5@@Z)

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

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

Заранее спасибо!

боб.

  • 2
    Где вы взяли используемые вами библиотеки Boost? В этом пакете были встроенные библиотеки для VC 10, или вы их собирали сами? Правильно ли настроен проект для поиска в библиотеке (это должен быть boost_filesystem-vc100 файл с boost_filesystem-vc100 где boost_filesystem-vc100 то в имени).
  • 0
    Кроме того, я не уверен, но это может быть связано с параметром /Zc:wchar_t- для компилятора MSVC (который отключает встроенную поддержку wchar_t ). Когда используется /Zc:wchar_t- , wchar_t будет typedef для unsigned short (при условии, что включен соответствующий заголовок).
Показать ещё 2 комментария
Теги:
boost
visual-studio-2010
lnk2001

1 ответ

1

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

Путь: ваш-boost-path/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- ;

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

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

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

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

Боб..

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню