неопределенная ссылка на `boost :: filesystem :: detail :: get_current_path_api (std :: str - PullRequest
4 голосов
/ 25 декабря 2011

С Рождеством всех.

Вчера я скачал библиотеку Boost.Я использую CodeBlocks (с Mingw32 GCC V4.4.1), чтобы скомпилировать его.Командная строка bjam: bjam install --toolset = gcc - prefix = "C: \ zjc \ PluginFramework \ boost_1_42_0" --build-type = complete.и это успешно.и я хочу проверить библиотеку.я пишу некоторый код следующим образом:

</p> <pre><code>#include <stdlib.h> #include <iostream> using std::cout; using std::wcout; using std::endl; #include <string> using std::string; using std::wstring; #include <boost/algorithm/string.hpp> #include <boost/filesystem/path.hpp> #include <boost/filesystem/operations.hpp> #include <boost/format.hpp> int main(int argc, char* argv[]) { // ANSI character format cout << boost::format( "%1% %2%" ) % "Hell" % "Low" <<endl; string s1 = boost::str( boost::format( "%2% %1%" ) % "Hell" % "Low" ); cout << s1 << endl; // UNICODE character format wcout << boost::wformat( L"%s %X" ) % L"-1 is" % -1 << endl; wstring s2 = boost::str( boost::wformat( L"%2$s %1$.2f" ) % 3.141592 % L"Version" ); wcout << s2 << endl; // get the path of application(ANSI character set), note:boost::filesystem::path string AnsiPath = boost::filesystem::initial_path<boost::filesystem::path>().string(); cout<<AnsiPath<<endl; // get the path of application(unicode character set), note:boost::filesystem::wpath wstring UnicodePath = boost::filesystem::initial_path<boost::filesystem::wpath>().string(); wcout<<UnicodePath<<endl; system("PAUSE"); return 0; }

одна ошибка компиляции происходит: obj \ Debug \ main.o: C: \ zjc \ PluginFramework\ boost_1_42_0 \ include \ boost-1_42 \ boost \ filesystem \ operations.hpp | 530 | неопределенная ссылка на `boost :: filesystem :: detail :: get_current_path_api (std :: string &) '|Я добавил библиотеку в опции компоновщика:

boost_system-mgw44-mt-d-1_42.lib

libboost_system-mgw44-sd-1_42.lib

boost_system-mgw44-d.lib

boost_system-mgw44-d-1_42.lib

boost_system-mgw44-mt-d-1_42.lib

макросы:

BOOST_ALL_DYN_LINK

BOOST_SYSTEM_NO_LIB

BOOST_SYSTEM_NO_DEPRECATED

_DEBUG

1032 * * *1030* *1030* * * * * * ** BOOST_LIB_DIAGNOSTIC

Я ищу в Интернете. Решение связывает библиотеку надстройки файловой системы. Но я связал библиотеку.Моя среда : Win 7 Home version, код :: Blocks V 10.05.

1 Ответ

10 голосов
/ 25 декабря 2011

Библиотека файловой системы Boost является одной из включаемых (и не только заголовочных) библиотек. Просто добавьте «boost_filesystem» перед «boost_system».

Если все настроено правильно, вам не нужно добавлять библиотеки самостоятельно: Не устанавливайте BOOST_SYSTEM_NO_LIB / BOOST_FILESYSTEM_NO_LIB, если вам действительно не нужно. Если он не установлен, заголовки должны обрабатывать зависимости для вас.

Макросы с BOOST_..._DYN_LINK заставят заголовки пытаться связать совместно используемые библиотеки (которые вы деактивировали с другими макросами).

Еще одно замечание: если вы хотите добавить libs вручную. Не смешивайте их и добавляйте только один вариант, который вам нужен, и выбирайте правильный (например, многопоточная отладка "mt-d").

...