[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