Неразрешенная ошибка внешнего символа при компиляции cpp-netlib v0.9 - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь собрать библиотеку cpp-netlib из Visual Studio 2010, но получаю следующую ошибку компоновщика:

ошибка LNK2019: неразрешенный внешний символ "bool __cdecl boost:: network :: uri :: detail :: parse_uri_impl (класс boost :: iterator_range, класс std :: allocator>> &, struct boost :: network :: uri :: detail :: uri_parts_default_base &, struct boost :: network ::tags :: default_string) "(? parse_uri_impl @ detail @ uri @ network @ boost @@ YA_NAAV? $ iterator_range @ V? $ _ String_const_iterator @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std@@@ 4 @ AAUuri_parts_default_base @ 1234 @ Udefault_string @ tags @ 34 @@ Z) ссылка на функцию "bool __cdecl boost :: network :: uri :: detail :: parse_uri, класс std :: allocator>, struct boost :: network:: http :: tags :: http_default_8bit_tcp_resolve> (класс std :: basic_string, класс std :: allocator> &, struct boost :: network :: uri :: detail :: uri_parts &) "(?? $ parse_uri @ V?$ basic_string @ DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@ Uhttp_default_8bit_tcp_resolve @ теги @ HTTP @ сеть @ импульс @@@ Подробно @ @ сеть URI @ подталкивание @@ YA_NAAV? $ Basic_string @ DU? $ Char_traits @ D @ станд @@ V? $ Распределитель @ D @ 2 @@ станд @@ ААУ? $ Uri_parts @ Uhttp_default_8bit_tcp_resolve @ теги @ HTTP @ сеть@boost @@@ 0123 @@ Z) * ​​1006 *

Немного покопалось, что это может быть связано с версией Boost, которую я использую (1.46.1), но я попытался скомпилироватьпротив 1.47.0 и 1.45.0 и получить ту же ошибку.

Что требуется для компиляции этой библиотеки?

1 Ответ

3 голосов
/ 15 июля 2011

После долгих поисков я нашел этот пост и этот один от создателя библиотеки, упомянув:

  1. Возможность отключить необходимую внешнюю библиотеку, которая будет связана с макросом (BOOST_NETWORK_NO_LIB). С этим макросом, определенным ранее любые заголовки cpp-netlib включены (или в командной строке) функции, которые были сделаны extern или просто свободные функции в пространстве имен уровни помечены как «встроенные» и имеют их определения соответственно в каждой единице перевода. Это адрес Джеффа Гарланда и озабоченность других о необходимости использования внешней библиотеки при использовании cpp-netlib, когда он всегда был только заголовком до 0.9. я все еще борясь с мыслью о том, чтобы сделать поведение только заголовка по умолчанию, но я не женат на "внешней библиотеке по умолчанию" решение либо.

Я могу скомпилировать, если я добавлю это определение макроса перед заголовками моего cpp-netlib, например:

#define BOOST_NETWORK_NO_LIB

#include <boost/network/protocol/http/client.hpp>

Во втором посте, который я обнаружил, есть также упоминание «Вам нужно создать / связать библиотеку URI», что звучит так, как будто это может быть лучшим решением.

К сожалению, мои знания c ++ и boost не самые лучшие, поэтому я просто начал с того, что сработало.

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

...