Проблема с Boost :: Asio для C ++ - PullRequest
0 голосов
/ 10 апреля 2010

Для моей дипломной работы я реализую распределенную версию алгоритма для факторизации больших целых чисел (нахождения простой факторизации). Это имеет приложения, например, безопасность криптосистемы RSA.

Мое видение состоит в том, что клиенты (linux или windows) будут загружать приложение и вычислять некоторые числа (они независимы, поэтому подходят для распараллеливания). Номера (не очень часто встречающиеся) будут отправлены на главный сервер для сбора этих номеров. Как только главный сервер соберет достаточное количество чисел, он выполнит остальную часть вычислений, которые нельзя легко распараллелить.

Во всяком случае, на технические вопросы. Я думал использовать Boost :: Asio для реализации сокет-клиент / сервер, для связи клиентов с главным сервером. Поскольку я хочу компилировать для Linux и Windows, я думал, что Windows будет хорошим местом для начала, как и любой другой. Поэтому я скачал библиотеку Boost и скомпилировал ее, как сказано на странице Boost Getting Started :

1010 * самозагрузка *

. \ Bjam

Всё скомпилировано просто отлично. Затем я пытаюсь скомпилировать один из найденных примеров из client.cpp из Asio (здесь .. edit: не могу опубликовать ссылку из-за ограничений). Я использую компилятор Visual C ++ из Microsoft Visual Studio 2008, например:

cl / EHsc / I D: \ Downloads \ boost_1_42_0 client.cpp

Но я получаю эту ошибку:

/ выход: client.exe

client.obj

ССЫЛКА: фатальная ошибка LNK1104: не удается открыть файл 'libboost_system-vc90-mt-s-1_42.lib'

Кто-нибудь знает, что может быть не так или как я могу двигаться вперед? Всю неделю я пытался найти простую клиент-серверную программу для работы с c ++, но безуспешно. Начинается серьезное разочарование.

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

1 Ответ

2 голосов
/ 10 апреля 2010

Причиной сбоя сборки является то, что она не может найти библиотечный файл, содержащий систему надстройки. Boost включает «удобную» функцию автоматического наложения, так что когда вы включаете заголовочный файл для двоичного libaray (в отличие от библиотеки только с заголовками), boost автоматически сообщает компилятору, что он должен ссылаться в библиотеке. Недостатком этого является то, что boost не сообщает компилятору, где найти библиотеку.

Краткий ответ - прочитать немного дальше в руководстве по началу работы с надписью. На этой странице показано, как добавить необходимые флаги в командную строку компилятора: Начало работы в Windows: ссылки из командной строки .

Первое, что вам нужно сделать, это найти файл .lib. Boost скрывает их в глубокой структуре каталогов, поэтому ищите их, начиная с каталога, из которого вы запускали bjam. Запишите каталог, в котором находится файл. Вы также можете использовать bootstrap --prefix=/some/install/location и bjam install для установки boost в другом месте, кроме исходного каталога, в котором вы его создали.

Вы строите свой проект с использованием решения Visual Studio или из командной строки?

Если вы используете файл решения, найдите страницу ссылок в свойствах решения. Там должно быть поле, в котором вы можете ввести дополнительные пути к библиотекам. Добавьте в этот каталог каталог, в который вы добавляете .lib файлы.

Если вы используете cl в командной строке, ознакомьтесь с параметрами командной строки для cl и link. Вы можете передавать команды компоновщику, используя опцию cl /link, и вы ищете команду компоновщика /libpath.

...