CMake erreur de couplage (undefined reference to)

Je travaille avec le SSL-logiciel de Vision. Il a un exemple de client que j'ai essayé de le séparer de l'ensemble du projet. J'ai trouvé les sources nécessaires pour modifier un client moi-même, alors j'ai juste copié à partir du logiciel et utilisé CMake pour construire mon client.

La structure du projet ci-dessous est simplifié, se rétrécissant à la question (je crois!).

.
├── CMakeLists.txt 
├── main.cc
├── build
│   ├── CMakeLists.txt
│   └── messages_ssl_... (.cc/.h, 4 each)
└── src
    ├── CMakeLists.txt
    └── (Other subdirs and sources/headers) 

./CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)
projet( TestClient )

find_package( PkgConfig REQUIS )
pkg_check_modules( QTCORE_PKG QtCore )
include_directories( ${QTCORE_PKG_INCLUDE_DIRS} )

inclure(FindProtobuf)
find_package( Protobuf REQUIS )
include_directories( ${PROTOBUF_INCLUDE_DIRS} )

find_package( PkgConfig REQUIS )
pkg_check_modules( GLIB_PKG glib-2.0 )
include_directories( ${GLIB_PKG_INCLUDE_DIRS} )

include_directories( "src" ) add_subdirectory( src )

include_directories( "build" ) add_subdirectory( build )

add_executable( clientTest clientTest.cc )

target_link_libraries( clientTest robocup_ssl_client
messages_robocup_ssl_detection.pb messages_robocup_ssl_geometry.pb
messages_robocup_ssl_wrapper.pb messages_robocup_ssl_refbox_log.pb
netraw robocup_ssl_client protobuf QtCore )

./build/CMakeLists.txt:

add_library( messages_robocup_ssl_detection.pb PARTAGÉ messages_robocup_ssl_detection.pb.cc )

add_library( messages_robocup_ssl_refbox_log.pb PARTAGÉ messages_robocup_ssl_refbox_log.pb.cc )

add_library( messages_robocup_ssl_geometry.pb PARTAGÉ messages_robocup_ssl_geometry.pb.cc )

add_library( messages_robocup_ssl_wrapper.pb PARTAGÉ messages_robocup_ssl_wrapper.pb.cc )

Il pourrait être un manque #include dans le messages_ssl_... fichiers, mais ils sont tous auto-généré et semble être correct.

Dans messages_robocup_ssl_detection.pb.h et messages_robocup_ssl_detection.pb.h il y a seulement protobuf comprend.

Dans messages_robocup_ssl_refbox_log.pb.h:

#include "messages_robocup_ssl_detection.pb.h"
//Other protobuf includes

Dans messages_robocup_ssl_wrapper.h:

#include "messages_robocup_ssl_detection.pb.h"
#include "messages_robocup_ssl_geometry.pb.h"
//Other protobuf includes

Dans chaque .cc fichier est inclus uniquement son en-tête et d'autres protobuf libs.

Enfin, quand je le fais faire, l'erreur suivante est générée:

Linking CXX executable clientTest
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::ByteSize() const'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::MergeFrom(SSL_GeometryData const&)'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `protobuf_AddDesc_messages_5frobocup_5fssl_5fgeometry_2eproto()'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::Clear()'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::SSL_GeometryData()'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::default_instance()'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::SerializeWithCachedSizesToArray(unsigned char*) const'
build/libmessages_robocup_ssl_wrapper.pb.so: undefined reference to `SSL_GeometryData::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*)'
collect2: ld returned 1 exit status
make[2]: ** [clientTest] Erro 1
make[1]: ** [CMakeFiles/clientTest.dir/all] Erro 2
make: ** [all] Erro 2

J'ai essayé de résoudre ce problème pour un certain temps.
Pourquoi le libmessages_robocup_ssl_wrapper.pb.so montrant les erreurs si il a déjà été construit avant le lien?

Si il n'y a aucune information supplémentaire est nécessaire, il suffit de demander!

OriginalL'auteur Lucas | 2013-05-15