[CMake] getting undefined error to my own libs.

eial at cs.bgu.ac.il eial at cs.bgu.ac.il
Tue Dec 29 08:09:32 EST 2009


hello.
I'm writing a c++ program that uses three shared libs that I wrote, for some reason, when it gets to the main cpp file, it fails with undefined error. here is the error report:

Linking CXX executable ../build/ossm                                                               
cd /home/dagg/workspace/OSSM/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/ossm.dir/link.txt --verbose=1                                                                                      
/usr/bin/c++     -fPIC CMakeFiles/ossm.dir/COssm.cpp.o  -o ../build/ossm -rdynamic ../build/libs/libDataObjects.so ../build/libs/libUtilities.so ../build/libs/libThreads.so ../build/libs/libUtilities.so -lboost_thread-mt -lboost_unit_test_framework-mt -Wl,-rpath,/home/dagg/workspace/OSSM/build/libs                                                                                                 
CMakeFiles/ossm.dir/COssm.cpp.o: In function `Ossm::cleanUp()':                                    
/home/dagg/workspace/OSSM/src/COssm.cpp:33: undefined reference to `Array<bool>::Array(int)'       
/home/dagg/workspace/OSSM/src/COssm.cpp:35: undefined reference to `Array<bool>::operator[](int)'  
/home/dagg/workspace/OSSM/src/COssm.cpp:39: undefined reference to `Array<bool>::operator[](int)'  
CMakeFiles/ossm.dir/COssm.cpp.o: In function `~World':                                             
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Nation*>::~Array()'                                                                                            
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<City*>::~Array()'                                                                                              
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Continent*>::~Array()'                                                                                         
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Competition*>::~Array()'                                                                                       
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Team*>::~Array()'                                                                                              
CMakeFiles/ossm.dir/COssm.cpp.o: In function `Ossm::cleanUp()':                                    
/home/dagg/workspace/OSSM/src/COssm.cpp:44: undefined reference to `Array<bool>::~Array()'         
/home/dagg/workspace/OSSM/src/COssm.cpp:44: undefined reference to `Array<bool>::~Array()'         
CMakeFiles/ossm.dir/COssm.cpp.o: In function `~World':                                             
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Team*>::~Array()'                                                                                              
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Competition*>::~Array()'                                                                                       
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<Continent*>::~Array()'                                                                                         
/home/dagg/workspace/OSSM/src/DataObjects/CWorld.hpp:30: undefined reference to `Array<City*>::~Array()'                                                                                              
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::~bzip2_base()'                                                                                             
./build/libs/libUtilities.so: undefined reference to `DataFactory::~DataFactory()'                
./build/libs/libDataObjects.so: undefined reference to `Array<Stadium*>::Array()'                 
./build/libs/libUtilities.so: undefined reference to `Array<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator[](int)'                                               
./build/libs/libUtilities.so: undefined reference to `Array<Staff*>::size() const'                
./build/libs/libDataObjects.so: undefined reference to `Array<Nation*>::Array()'                  
./build/libs/libUtilities.so: undefined reference to `Array<City*>::Array(int)'                   
./build/libs/libUtilities.so: undefined reference to `Array<Staff*>::~Array()'                    
./build/libs/libUtilities.so: undefined reference to `Array<Continent*>::size() const'            
./build/libs/libThreads.so: undefined reference to `vtable for StaffSaverThread'                  
./build/libs/libUtilities.so: undefined reference to `vtable for Utils'                           
./build/libs/libDataObjects.so: undefined reference to `Array<unsigned char>::Array(int)'         
./build/libs/libUtilities.so: undefined reference to `Array<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::size() const'                                                  
./build/libs/libDataObjects.so: undefined reference to `Array<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~Array()'                                                    
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::end(bool)'                                                                                                 
./build/libs/libThreads.so: undefined reference to `vtable for DataLoaderThread'                  
./build/libs/libThreads.so: undefined reference to `boost::iostreams::bzip2::finish'              
./build/libs/libUtilities.so: undefined reference to `Array<int>::~Array()'                       
./build/libs/libUtilities.so: undefined reference to `vtable for Base64Encoder'                   
./build/libs/libDataObjects.so: undefined reference to `Array<unsigned char>::~Array()'           
./build/libs/libUtilities.so: undefined reference to `Array<Competition*>::Array(int)'            
./build/libs/libDataObjects.so: undefined reference to `Array<unsigned short>::~Array()'          
./build/libs/libThreads.so: undefined reference to `vtable for DataSaverThread'                   
./build/libs/libUtilities.so: undefined reference to `vtable for Base64Decoder'                   
./build/libs/libUtilities.so: undefined reference to `Array<unsigned char>::operator[](int)'      
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::decompress()'                                                                                              
./build/libs/libThreads.so: undefined reference to `boost::iostreams::bzip2::stream_end'          
./build/libs/libThreads.so: undefined reference to `boost::iostreams::bzip2_error::check(int)'    
./build/libs/libDataObjects.so: undefined reference to `Array<Competition*>::Array()'             
./build/libs/libUtilities.so: undefined reference to `Array<City*>::size() const'                 
./build/libs/libUtilities.so: undefined reference to `Array<Team*>::operator[](int)'              
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::after(char const*&, char*&)'                                                                               
./build/libs/libUtilities.so: undefined reference to `Array<Continent*>::operator[](int)'         
./build/libs/libUtilities.so: undefined reference to `Array<Team*>::size() const'                 
./build/libs/libUtilities.so: undefined reference to `Array<Staff*>::Array(int)'                  
./build/libs/libThreads.so: undefined reference to `vtable for GameThread'                        
./build/libs/libDataObjects.so: undefined reference to `Array<unsigned short>::Array(int)'        
./build/libs/libDataObjects.so: undefined reference to `Array<int>::Array()'                      
./build/libs/libUtilities.so: undefined reference to `Array<City*>::operator[](int)'              
./build/libs/libUtilities.so: undefined reference to `Array<Competition*>::operator[](int)'       
./build/libs/libThreads.so: undefined reference to `vtable for StaffLoaderThread'                 
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::do_init(bool, void* (*)(void*, int, int), void (*)(void*, void*), void*)'                                  
./build/libs/libDataObjects.so: undefined reference to `Array<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Array(int)'                                                  
./build/libs/libUtilities.so: undefined reference to `Array<Competition*>::size() const'          
./build/libs/libDataObjects.so: undefined reference to `Array<Team*>::Array()'                    
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::bzip2_base(boost::iostreams::bzip2_params const&)'                                                         
./build/libs/libDataObjects.so: undefined reference to `Array<int>::Array(int)'                   
./build/libs/libUtilities.so: undefined reference to `Array<Continent*>::Array(int)'              
./build/libs/libThreads.so: undefined reference to `Array<unsigned char>::~Array()'               
./build/libs/libUtilities.so: undefined reference to `Utils::~Utils()'                            
./build/libs/libThreads.so: undefined reference to `vtable for DataLinkerThread'                  
./build/libs/libUtilities.so: undefined reference to `Array<Staff*>::operator[](int)'
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::before(char const*&, char const*, char*&, char*)'
./build/libs/libThreads.so: undefined reference to `boost::iostreams::detail::bzip2_base::compress(int)'
./build/libs/libDataObjects.so: undefined reference to `Array<City*>::Array()'
./build/libs/libUtilities.so: undefined reference to `Array<Team*>::Array(int)'
./build/libs/libUtilities.so: undefined reference to `vtable for DataFactory'
./build/libs/libThreads.so: undefined reference to `Array<unsigned char>::size() const'
./build/libs/libThreads.so: undefined reference to `boost::iostreams::bzip2::run'
collect2: ld returned 1 exit status
make[2]: *** [build/ossm] Error 1
make[2]: Leaving directory `/home/dagg/workspace/OSSM'
make[1]: *** [src/CMakeFiles/ossm.dir/all] Error 2
make[1]: Leaving directory `/home/dagg/workspace/OSSM'
make: *** [all] Error 2

here is my cmakelist.txt:
#this is just a basic CMakeLists.txt, for more information see the cmake manpage

#add definitions, compiler switches, etc.
ADD_DEFINITIONS(-g -Wall -O2)

#get all cpp files in libs
file(GLOB UTIL_CPP Utilities/*.cpp)
file(GLOB DATA_CPP DataObjects/*.cpp)
file(GLOB THREADS_CPP Threads/*.cpp)
#file(GLOB TESTUNITS_CPP testUnits/Threads/*.cpp testUnits/Utils/*.cpp)

#build a shared library
ADD_LIBRARY(Utilities SHARED ${UTIL_CPP}) 
ADD_LIBRARY(DataObjects SHARED ${DATA_CPP}) 
ADD_LIBRARY(Threads SHARED ${THREADS_CPP})

#add_subdirectory(testUnits)
#link libs
target_link_libraries(Utilities ${Boost_LIBRARIES})
target_link_libraries(DataObjects ${Boost_LIBRARIES} Utilities)
target_link_libraries(Threads ${Boost_LIBRARIES} Utilities)

#list all source files here
ADD_EXECUTABLE(ossm COssm.cpp)

#need to link to some other libraries
TARGET_LINK_LIBRARIES(ossm DataObjects Utilities Threads)

#add an install target here
#INSTALL_FILES(...)
#INSTALL_PROGRAMS(...)
#INSTALL_TARGET(...)

last but not least, here is the content of each lib in terms for code files:
src/DataObjects:
CArray.cpp      
CArray.hpp      
CCity.cpp       
CCity.hpp       
CCompetition.cpp
CCompetition.hpp
CContinent.cpp  
CContinent.hpp  
CDataSharedIncludes.hpp
CFormation.hpp         
CLanguage.cpp          
CLanguage.hpp          
CLinkBatch.cpp         
CLinkBatch.hpp         
CNation.cpp            
CNation.hpp            
CStaff.cpp             
CStaff.hpp             
CTaskInterface.hpp     
CTeam.cpp              
CTeam.hpp              
CTrainingActivity.hpp  
CWorld.hpp             

src/Threads:
CDataLinkerThread.cpp
CDataLinkerThread.hpp
CDataLoaderThread.cpp
CDataLoaderThread.hpp
CDataSaverThread.cpp 
CDataSaverThread.hpp 
CGameThread.cpp      
CGameThread.hpp      
CStaffLoaderThread.cpp
CStaffLoaderThread.hpp
CStaffSaverThread.cpp
CStaffSaverThread.hpp

src/Utilities:
CBase64Decoder.cpp
CBase64Decoder.hpp
CBase64Encoder.cpp
CBase64Encoder.hpp
CDataFactory.cpp
CDataFactory.hpp
CThreadPool.cpp
CThreadPool.hpp
CUtils.cpp
CUtils.hpp

how can I solve the problem? if more data is needed, then say so and I'll post it.

thanks.




More information about the CMake mailing list