2010-01-28 7 views
2

J'ai travaillé sur les exemples asio ssl (liés ci-dessous). Malgré tous mes efforts, j'ai été incapable de lier openssl dans l'exemple boost. La sortie de ld est que ld manque des symboles de libssl.a. La chose que je n'arrive pas à comprendre est que j'ai trouvé tous les symboles dans libssl.a avec nm que ld dit qu'il manque. Je pense que je fais quelque chose de stupide mais je ne suis pas assez familier avec le C++ pour le réparer. J'ai également inclus mon makefile. La source de ssl-client.cpp est verbatim du lien.Aide à la construction boost Exemple asio ssl

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 
+0

Mettez en forme le code en indentant 4 espaces (je l'ai fait et fait pour vous). Est-ce vraiment votre Makefile, verbatim? Je remarque que vous définissez la variable 'LIBS', puis en utilisant la variable' LIB' (sans le S). –

+0

Le LIBS -> LIB était juste une petite faute de frappe quand je me débrouillais. Désolé pour la confusion. Je ne m'attendais pas à formater des makefiles, donc je n'ai pas essayé. Merci pour le conseil! –

+0

'CPP = g ++' ne semble pas tout à fait correct. Le compilateur C++ est 'CXX', pas' CPP'. 'CPP' est le préprocesseur C. – jww

Répondre

4

Je pense que vous avez mal compris comment fonctionne l'option -L. -L spécifie un chemin dans lequel rechercher des bibliothèques. Pour spécifier une bibliothèque individuelle à un lien, utilisez l'option -l et omettre le préfixe « lib », comme suit:

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

En outre, il n'y a généralement pas d'espace entre l'option de chemin comprennent -I et le chemin réel. Je ne sais pas si un espace il pose des problèmes, mais vous pouvez essayer ce soit du bon côté:

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

En outre, comme il est indiqué dans mon commentaire, vous avez défini la variable LIBS mais utilisé le LIB variable. L'appel à g ++ doit être comme suit:

$(CPP) $(LIBS) $(INCLUDES) ssl-client.cpp 
+0

Merci un million. Je savais que c'était quelque chose de simple. Maintenant, je suis un pas de plus pour ne pas être un C++ newb. –

Questions connexes