View previous topic :: View next topic |
Author |
Message |
Treborius Guru
Joined: 18 Oct 2005 Posts: 585 Location: Berlin
|
Posted: Thu Aug 30, 2007 11:53 am Post subject: cmake, c++ question |
|
|
i am working on a little program with cmake,
i use the cmake command
ADD_LIBRARY
(functions
class1.hpp class1.cpp
class2.hpp class2.cpp
class3.hpp class3.cpp
)
to a build a static library and then link eveything to the main-program
everything worked great, till now,
i tried to add a hpp + a cpp with some general-functions to the library
Code: |
functions.hpp functions.cpp to the library,
|
the functions are something like
Code: |
void Tokenize(const std::string& str, std::vector<std::string>& out);
|
but now i get undefined references to these functions when i try to build my program,
if i encapsulate these functions into a class, everything works fine
does anybody know where these problems come from? |
|
Back to top |
|
|
didl Retired Dev
Joined: 09 Sep 2003 Posts: 1106 Location: Pittsburgh, PA
|
Posted: Thu Aug 30, 2007 1:00 pm Post subject: |
|
|
Could you please post the cmake output for compiling the static lib
and linking as well as the error message. Depending on
your setup you may need to do
to obtain full output. |
|
Back to top |
|
|
Treborius Guru
Joined: 18 Oct 2005 Posts: 585 Location: Berlin
|
Posted: Thu Aug 30, 2007 4:17 pm Post subject: |
|
|
before i tried to move my functions out of the header into to cpp and so into the lib, everything went fine, then i splitted my methods.hpp
wich looked like that :
[/code]
void Tokenize(const std::string& str,
std::vector<std::string>& tokens,
const std::string& delimiter = " ")
{
tokens.clear();
// Skip delimiters at beginning.
.
.
.
}
[/code]
into methods.hpp
Code: |
void Tokenize(const std::string& str,
std::vector<std::string>& tokens,
const std::string& delimiter = " ");
|
and cpp
Code: |
void Tokenize(const std::string& str,
std::vector<std::string>& tokens,
const std::string& delimiter)
{
tokens.clear();
// Skip delimiters at beginning
.
.
.
}
|
this is the cmake output of building the static lib, where the methods.cpp and the hpp are in
Code: |
[ 30%] Building CXX object lib_functions/CMakeFiles/functions.dir/methods.o
/usr/bin/c++ -I/home/henning/fngpr_08/scm/EARS/lib -Wall -Weffc++ -Wno-pragmas -g -O0 -pedantic -Wfloat-equal -Wshadow -Wunsafe-loop-optimizations -Wconversion -Wreorder -o lib_functions/CMakeFiles/functions.dir/methods.o -c methods.cpp
/public/bin/cmake -E cmake_progress_report /home/henning/fngpr_08/scm/EARS/CMakeFiles 9
|
and thats the error when i try to link against this lib
Code: |
Linking CXX executable ../bin/test_data
./train_data/libtraindata.a(traindatabase.o): In function `TrainDataBase':
./train_data/traindatabase.cpp:45: undefined reference to `Tokenize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
./train_data/traindatabase.cpp:45: undefined reference to `Tokenize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
./train_data/libtraindata.a(dataset.o): In function `DataSet::parse_lab_file()':
./train_data/dataset.cpp:77: undefined reference to `Tokenize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: ld returned 1 exit status
make[2]: *** [test/../bin/test_data] Error 1
make[1]: *** [test/CMakeFiles/../bin/test_data.dir/all] Error 2
make: *** [all] Error 2
|
and thats how i try to link against the lib
Code: |
ADD_EXECUTABLE(../bin/test_data test_data_base.cpp)
target_link_libraries(../bin/test_data
functions
math
traindata
) |
|
|
Back to top |
|
|
didl Retired Dev
Joined: 09 Sep 2003 Posts: 1106 Location: Pittsburgh, PA
|
Posted: Fri Aug 31, 2007 1:02 pm Post subject: |
|
|
It is hard to tell from what you posted where the problem lies.
Can you make sure that methods.o is part of the library via
"ar -t"? |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|