undefined reference mit shared-library mit cmake

Habe ich viel von platziert finden Sie diese Antwort, aber ich habe nicht in der Lage gewesen, irgendetwas zu finden, was zu meiner situation. Es scheint so einfach, die ist, warum das ist so frustrierend.

Baue ich ein Projekt mit CMAKE. Ich bin der Generierung zwei shared libraries. Eine beinhaltet das andere. Ich bin auch der Generierung einer ausführbaren Datei. Die ausführbare Datei ist die Verknüpfung zu der gemeinsam genutzten Bibliothek kapselt die anderen. Hier ist der relevante Teil des Codes:

################################################################################ 
# Make the shared libraries                                                             
################################################################################ 
# Standard stuff                                                                 
add_library(er SHARED src/std_math.cc src/snapshot.cc)                           
include_directories(hdr)                                                         
target_link_libraries(er rt)                                                     

# DSP library                                                                    
add_library(dsp SHARED src/dsp.cc)                                               
include_directories(hdr)                                                         
target_link_libraries(dsp er /usr/lib/libfftw3f.so /usr/lib/libfftw3.so)         

################################################################################ 
# Make an Executable                                                             
################################################################################ 
message("-- Making executable for testing --")                                   
add_executable(er_test test/dsp_test.cc)                                         
include_directories(hdr)                                                         
target_link_libraries(er_test dsp)                                               

################################################################################ 
# What to do with make install                                                   
################################################################################ 
message ("-- Writting install scripts --")                                       

# See if there is an install directory already assigned.  If not, set it to the  
# system default.                                                                
if (NOT DEFINED INSTALL_DIR)                                                     
    set (INSTALL_DIR /usr/local/)                                                
endif (NOT DEFINED INSTALL_DIR)                                                  
message ("  -- install_dir = ${INSTALL_DIR}")                                    

# Install the libraries and header files to the appropriate places               
install (TARGETS er dsp DESTINATION ${INSTALL_DIR}/bin)                          
install (FILES hdr/dsp.hh hdr/snapshot.hh hdr/std_math.hh DESTINATION ${INSTALL_DIR}/include)

Hier ist die Fehlermeldung, die ich bekomme.

CMakeFiles/er_test.dir/test/dsp_test.cc.o: In function `main':
dsp_test.cc:(.text.startup+0x11e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x142): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x166): undefined reference to `std::vector<int, std::allocator<int> > subvec<int>(std::vector<int, std::allocator<int> > const&, int, int, int)'
dsp_test.cc:(.text.startup+0x182): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, std::vector<int, std::allocator<int> > const&)'
dsp_test.cc:(.text.startup+0x1b6): undefined reference to `std::vector<int, std::allocator<int> > subvec<int>(std::vector<int, std::allocator<int> > const&, int, int, int)'

und es gibt viele mehr, in denen diese kamen aus. Ich habe versucht, mit statischen Bibliotheken, aber dann ist es eben Verzögerungen das problem bis zum nächsten ausführbaren versuche ich auch auf diese Bibliotheken zu. Ich habe auch versucht mit g++ statt c++. Ich habe versucht swapping-Bibliothek um Aufträge. Auch ist es nicht ein template-Problem, da mindestens eine der Referenzen kann es nicht finden, ist nicht eine vorgefertigte Funktion. Ich habe gesucht, den Bibliotheken für die Symbole, und ich war in der Lage, Sie zu finden, obwohl Sie wurden vorangestellt und postpended von zufälligen Zeichen.

Ich verstehe nicht, was Los ist. Bitte helfen Sie.

Dank,

UPDATE

Fand ich einen weiteren link, speziell diese eine, dass die genannten potenziellen Probleme mit add_subdirectory. Dies ist ein Teilprojekt für ein anderes Projekt. Also schickte ich in das Projekt und baute es. Es hat geklappt! Es funktioniert immer noch nicht in das übergeordnete Verzeichnis wenn. Vielleicht können Hinweise geben, um jemanden.

Nochmals vielen Dank,

  • Verwenden c++filt zu sehen, was die wirklichen Funktionsnamen sind-die scheinbar zufällige Zeichen sind ein Ergebnis des name mangling in C++
  • ok. Ich habe nm libdsp.so | c++filt | grep -i gen_lpf zu finden, die Bibliothek, die ich suchte. Das war ziemlich genial. Danke für den Tipp.
  • Es scheint aproblem mit Ihren referenzierten Bibliothek, die nicht enthalten diese Dinge. Schauen Sie es und versuchen, zu prüfen, die lib Inhalt von diesem mit objdump. Vielleicht haben Sie nur vergessen zu kompilieren Sie in das "lib", oder der compiler optimiert Sie Weg.
  • Wenn ich nm, ich sehe alles, was, die es sagt mir, dass es nicht finden können. Gleiche Sache mit objdump.
InformationsquelleAutor jrk0414 | 2014-07-06
Schreibe einen Kommentar