CMake-linking-Fehler (undefined reference to)

Arbeite ich mit der SSL-Vision-software. Er hat ein Beispiel-client, die ich versucht habe zu trennen vom ganzen Projekt. Ich fand die Quellen, die erforderlich sind, um Bearbeiten ein client selbst, so dass ich nur kopiert von der software und verwendet CMake zum bauen meine Kunden.

Dem Projekt folgende Struktur wird vereinfacht, die Verengung auf das Thema (ich glaube!).

.
├── 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)

Projekt( TestClient )

find_package( PkgConfig ERFORDERLICH )

pkg_check_modules( QTCORE_PKG QtCore )

include_directories( ${QTCORE_PKG_INCLUDE_DIRS} )

gehören(FindProtobuf)

find_package( Protobuf ERFORDERLICH )

include_directories( ${PROTOBUF_INCLUDE_DIRS} )

find_package( PkgConfig ERFORDERLICH )

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 FREIGEGEBEN messages_robocup_ssl_detection.pb.cc )

add_library( messages_robocup_ssl_refbox_log.pb FREIGEGEBEN messages_robocup_ssl_refbox_log.pb.cc )

add_library( messages_robocup_ssl_geometry.pb FREIGEGEBEN messages_robocup_ssl_geometry.pb.cc )

add_library( messages_robocup_ssl_wrapper.pb FREIGEGEBEN messages_robocup_ssl_wrapper.pb.cc )

Könnte es eine fehlende #include in der messages_ssl_... - Dateien, aber Sie sind alle automatisch generiert und scheint richtig zu sein.

In messages_robocup_ssl_detection.pb.h und messages_robocup_ssl_detection.pb.h es gibt nur protobuf umfasst.

In messages_robocup_ssl_refbox_log.pb.h:

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

In messages_robocup_ssl_wrapper.h:

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

In jedem .cc-Datei enthalten ist, nur die header und andere protobuf libs.

Schließlich, wenn ich machen, der folgende Fehler wird generiert:

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

Ich habe versucht, dies zu beheben, für einige Zeit.
Warum ist die libmessages_robocup_ssl_wrapper.pb.so zeigt Fehler, wenn es bereits gebaut, bevor der Verknüpfung?

Wenn es irgendeine zusätzliche Informationen benötigt, einfach Fragen!

InformationsquelleAutor Lucas | 2013-05-15
Schreibe einen Kommentar