Помощь в строительстве Boost Asio SSL пример - PullRequest
3 голосов
/ 28 января 2010

Я работал с примерами asio ssl (ссылка ниже). Несмотря на все усилия, я не смог связать openssl с примером надстройки. Вывод ld заключается в том, что в ld отсутствуют символы из libssl.a. Единственное, что я не могу понять, это то, что я нашел все символы в libssl.a с nm, которые, по словам ld, отсутствуют. Я подозреваю, что делаю что-то глупое, но я недостаточно знаком с c ++, чтобы это исправить. Я также включил мой make-файл. Источником ssl-client.cpp является дословно ссылка.

http://www.boost.org/doc/libs/1_41_0/doc/html/boost_asio/example/ssl/client.cpp

INCLUDES = -I /usr/local/boost_1_41_0/ -I /opt/local/include/
LIBS = -L/usr/local/boost_1_41_0/lib/libboost_system.a \
-L/opt/local/lib/libcrypto.a \
-L/opt/local/lib/libssl.a

CPP = g++

build: ssl-client

ssl-client: ssl-client.cpp
    $(CPP) $(LIBS) $(INCLUDES) ssl-client.cpp

1 Ответ

4 голосов
/ 28 января 2010

Я думаю, вы неправильно поняли, как работает опция -L. -L указывает путь для поиска библиотек. Чтобы указать отдельную библиотеку для ссылки, используйте параметр -l и пропустите префикс «lib» следующим образом:

LIBS = -L/usr/local/boost_1_41_0/lib -L/opt/local/lib \
    -lboost_system -lcrypto -lssl

Кроме того, обычно между пробелом -I include path и фактическим путем обычно нет пробела. Я не уверен, что пробел там вызывает проблемы, но вы можете попробовать это, чтобы быть на безопасной стороне:

INCLUDES = -I/usr/local/boost_1_41_0/ -I/opt/local/include/

Также, как отмечалось в моем комментарии, вы определили переменную LIBS, но затем использовали переменную LIB. Вызов g ++ должен быть следующим:

$(CPP) $(LIBS) $(INCLUDES) ssl-client.cpp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...