Hello -
There are a couple of things that could be going on, as building libraries
with KCC can be problematic.
First, I would make sure that your LAM installation is capable of building
a small test C++ application. A simple hello world app with MPI_INIT, a
cout, and MPI_FINALIZE should do the trick. If you can build this, you
konw that the MPI library is built properly (and that your KCC
installation is mostly right).
Second is to look at the libraries you are building internally (util and
mpipp). Keep in mind that KCC builds libraries in really strange ways,
and libtool doesn't always build libraries completely correct when used
with KCC. The MPI-2 C++ bindings in LAM work correctly in general with
libtool because we use a very small subset of C++ (no templates, no shared
libraries, etc.).
I would guess that you are not building the mpipp library correctly and
that is what is causing your problems. There are a number of flags you
must pass to KCC to have it build a library correctly - the KAI web pages
have information on building libraries - at least the flag
--one_instantiation_per_object is required if you are using templates.
Also, it is not possible to build "helper" libraries - you can not build a
library out of one or more other libraries (as libtool is designed to do).
Hope this helps,
Brian
On Wed, 21 May 2003, Viveka Vivekanandan wrote:
>
> Hi,
>
> I hope you will help me out of this problem. I am using KCC compiler
> version 4.0f. I have written a main program in mpitest1.cpp file. This
> main program needs two libraries util & mpipp. I can compile these two
> libraries using "make", but it fails when I rty to link them.
>
> I do not know what is wrong, my guess is that from the output (please see
> the output below), I can see that it could not find the STD libary
> (std::flush, std::partial_sum, std::vector<> , std::deque etc.) and also
> the KCC library (`__kai::rb_tree_node_base *__kai::rb_tree<T1, T2, N3>
> etc.)
>
> May be I am wrong. Any suggestions are welcome. Please let me know what
> we are missing. Please note that in the output I leave a blank space in
> between the error messages in order to read the error messages easily.
>
> Following is the command I used to produce an executable:
>
> >make driver_mpitest1.exe
>
> When I did the above command I got the following output:
>
> /bin/sh ../../../libtool --mode=link
> /data/zion/intersect/local_linux/KCCLIB/bin/mpiCC -g -I . -I .. -I
> ../../../Intersect/src -I ../../../Prototype/src -I
> ../../../LoadBalance/src -I ../../../IWel/src -I ../../../Eos/src -I
> ../../../Keyword/src -L/data/zion/intersect/local_linux/KCCLIB/lib/ -o
> driver_mpitest1.exe mpitest1.o ../mpipp/libmpipp.a ../util/libutil.a -lm
> /data/zion/intersect/local_linux/KCCLIB/bin/mpiCC -g -I . -I .. -I
> ../../../Intersect/src -I ../../../Prototype/src -I
> ../../../LoadBalance/src -I ../../../IWel/src -I ../../../Eos/src -I
> ../../../Keyword/src -o driver_mpitest1.exe mpitest1.o
> -L/data/zion/intersect/local_linux/KCCLIB/lib/ ../mpipp/libmpipp.a
> ../util/libutil.a -lm
> ../mpipp/libmpipp.a(comm.o): In function `mpi::Comm::pause(
> const(std::basic_string<char, std::char_traits<char>,
> std::allocator<char>> const &))':
> /users/vtil/zz/kai_support/Intersect/src/mpipp/comm.cpp:163: undefined
> reference to `std::basic_ostream<T1, T2> &std::flush<T1,
> T2>(std::basic_ostream<T1, T2> &) [with T1=char,
> T2=std::char_traits<char>]'
>
>
> ../mpipp/libmpipp.a(comm.o): In function `mpi::CommWorld::__ct( (int &,
> char **))':
> /users/vtil/zz/kai_support/Intersect/src/mpipp/comm.cpp:205: undefined
> reference to `std::basic_ostream<T1, T2> &std::flush<T1,
> T2>(std::basic_ostream<T1, T2> &) [with T1=char,
> T2=std::char_traits<char>]'
>
>
> ../mpipp/libmpipp.a(srinfo.o): In function `mpi::VDataInfo::init_displs(
> (void))':
> /users/vtil/zz/kai_support/Intersect/src/mpipp/srinfo.cpp:217: undefined
> reference to `T2 std::partial_sum<T1, T2>(T1, T1, T2) [with T1=int *,
> T2=int *]'
>
>
> ../mpipp/libmpipp.a(utils.o): In function `T2 &std::map<T1, T2, T3,
> T4>::operator [](const __kai::map_base<T1, T2, T3, T4>::key_type &) [with
> T1=int, T2=std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>, T3=std::less<int>,
> T4=std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>]':
> /vend/KCC/KCC_BASE/include/map:274: undefined reference to
> `__kai::rb_tree_node_base *__kai::rb_tree<T1, T2, N3>::__modify(const T1
> &, bool *, __kai::rb_tree_base::modify_mode) [with T1=int,
> T2=std::less<int>, N3=(unsigned int)16]'
>
>
> ../mpipp/libmpipp.a(utils.o): In function `__kai::map_base<T1, T2, T3,
> T4>::map_base<int, std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>, std::less<int>, std::allocator<std::pair<const
> int, std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>>>>(const T3 &) [with T1=int,
> T2=std::basic_string<char, std::char_traits<char>, std::allocator<char>>,
> T3=std::less<int>, T4=std::allocator<std::pair<const int,
> std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>>>]':
> /vend/KCC/KCC_BASE/include/map:99: undefined reference to `virtual
> function table for __kai::map_base<int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>, std::less<int>,
> std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>>'
>
>
> ../mpipp/libmpipp.a(utils.o): In function `__kai::map_base<T1, T2, T3,
> T4>::~map_base<int, std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>, std::less<int>, std::allocator<std::pair<const
> int, std::basic_string<char, std::char_traits<char>,
> std::allocator<char>>>>>() [with T1=int, T2=std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>, T3=std::less<int>,
> T4=std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>]':
> /vend/KCC/KCC_BASE/include/map:122: undefined reference to `virtual
> function table for __kai::map_base<int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>, std::less<int>,
> std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>>'
>
>
> ../mpipp/libmpipp.a(utils.o): In function `mpi::Clock::Clock(const
> std::basic_string<char, std::char_traits<char>, std::allocator<char>> &,
> std::basic_ostream<char, std::char_traits<char>> &)':
> /users/vtil/zz/kai_support/Intersect/src/mpipp/utils.cpp:31: undefined
> reference to `typeinfo for __kai::map_base<int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>, std::less<int>,
> std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>>'
>
>
> /users/vtil/zz/kai_support/Intersect/src/mpipp/utils.cpp:31: undefined
> reference to `void __kai::map_base<T1, T2, T3,
> T4>::destroy_node(__kai::rb_tree_node_base *) [with T1=int,
> T2=std::basic_string<char, std::char_traits<char>, std::allocator<char>>,
> T3=std::less<int>, T4=std::allocator<std::pair<const int,
> std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>]'
> /users/vtil/zz/kai_support/Intersect/src/mpipp/utils.cpp:31: undefined
> reference to `__kai::rb_tree_node_base *__kai::map_base<T1, T2, T3,
> T4>::make_node(const void *) [with T1=int, T2=std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>, T3=std::less<int>,
> T4=std::allocator<std::pair<const int, std::basic_string<char,
> std::char_traits<char>, std::allocator<char>>>>]'
>
>
> ../util/libutil.a(messages.o): In function
> `ngrs::MessageStreamStack::__ct( (void))':
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:100: undefined
> reference to `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> ../util/libutil.a(messages.o): In function `std::stack<T1,
> T2>::stack<ngrs::IMessageStream *, std::deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>>(const T2 &) [with
> T1=ngrs::IMessageStream *, T2=std::deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>]':
> /vend/KCC/KCC_BASE/include/stack:47: undefined reference to`_Z1ZZ2Z::__CPR137____ct__Q2_3std91deque__tm__78_PQ2_4ngrs14IMessageStreamQ2_3st
> d43allocator__tm__26_PQ2_J33JJ38JFRCQ2_3std19deque__tm(void)'
>
>
> ../util/libutil.a(messages.o): In function `void std::stack<T1,
> T2>::push(const T2::value_type &) [with T1=ngrs::IMessageStream *,
> T2=std::deque<ngrs::IMessageStream *, std::allocator<ngrs::IMessageStream
> *>>]':
> /vend/KCC/KCC_BASE/include/stack:52: undefined reference to `void
> std::deque<T1, T2>::push_back(const T1 &) [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> ../util/libutil.a(messages.o): In function `void std::stack<T1,
> T2>::pop() [with T1=ngrs::IMessageStream *,
> T2=std::deque<ngrs::IMessageStream *, std::allocator<ngrs::IMessageStream
> *>>]':
> /vend/KCC/KCC_BASE/include/stack:53: undefined reference to `void
> std::deque<T1, T2>::pop_back() [with T1=ngrs::IMessageStream *,
> T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> ../util/libutil.a(messages.o): In function`_PQ2_J35JJ40JFRCQ2_3stdJ13::__CPR309____ct__Q2_3std140stack__tm__126_PQ2_4ngrs1
> 4IMessageStreamQ2_3std91deque__tm__78_PQ2_J35JJ40JQ2_3std43allocator__tm(__compl
> ex)':
> /vend/KCC/KCC_BASE/include/stack:24: undefined reference to`_Z1ZZ2Z::__CPR137____ct__Q2_3std91deque__tm__78_PQ2_4ngrs14IMessageStreamQ2_3st
> d43allocator__tm__26_PQ2_J33JJ38JFRCQ2_3std19deque__tm(void)'
>
>
> ../util/libutil.a(messages.o): In function `std::stack<T1,
> T2>::~stack<ngrs::IMessageStream *, std::deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>>() [with T1=ngrs::IMessageStream
> *, T2=std::deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>]':
> /vend/KCC/KCC_BASE/include/stack:24: undefined reference to
> `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> ../util/libutil.a(messages.o): In function `ngrs::MessageStreams::__dt(
> (void))':
> /users/vtil/zz/kai_support/Intersect/src/util/../util/messages.h:121:
> undefined reference to `std::vector<T1,
> T2>::~vector<ngrs::MessageStreamStack,
> std::allocator<ngrs::MessageStreamStack>>() [with
> T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]'
>
>
> ../util/libutil.a(messages.o): In function `std::vector<T1,
> T2>::vector<ngrs::MessageStreamStack,
> std::allocator<ngrs::MessageStreamStack>>(T2::size_type, const T1 &,
> const T2 &) [with T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]':
> /vend/KCC/KCC_BASE/include/vector:123: undefined reference to `void
> std::vector<T1, T2>::_initialize_storage(T2::size_type, const T1 &) [with
> T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]'
>
>
> ../util/libutil.a(messages.o): In function `void std::vector<T1,
> T2>::push_back(const T1 &) [with T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]':
> /vend/KCC/KCC_BASE/include/vector:200: undefined reference to `void
> std::vector<T1, T2>::insert_aux(T2::pointer, const T1 &) [with
> T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]'
>
>
> ../util/libutil.a(messages.o): In function`_c::__ct__Q2_4ngrs19PrefixMessageStreamFRCQ2_3std78basic_string__tm__58_cQ2_3st
> d20char_traits__tm__2_cQ2_3std18allocator__tm(void)':
>
>
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:57: undefined
> reference to `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:57: undefined
> reference to `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:57: undefined
> reference to `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:57: undefined
> reference to `std::deque<T1, T2>::~deque<ngrs::IMessageStream *,
> std::allocator<ngrs::IMessageStream *>>() [with T1=ngrs::IMessageStream
> *, T2=std::allocator<ngrs::IMessageStream *>]'
>
>
> /users/vtil/zz/kai_support/Intersect/src/util/messages.cpp:57: undefined
> reference to `std::vector<T1, T2>::~vector<ngrs::MessageStreamStack,
> std::allocator<ngrs::MessageStreamStack>>() [with
> T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]'
>
>
> ../util/libutil.a(messages.o): In function
> `ngrs::PrefixMessageStream::__dt( (void))':
> /users/vtil/zz/kai_support/Intersect/src/util/../util/messages.h:54:
> undefined reference to `std::vector<T1,
> T2>::~vector<ngrs::MessageStreamStack,
> std::allocator<ngrs::MessageStreamStack>>() [with
> T1=ngrs::MessageStreamStack,
> T2=std::allocator<ngrs::MessageStreamStack>]'
>
>
> collect2: ld returned 1 exit status
> make: *** [driver_mpitest1.exe] Error 1
>
> Thank you.
>
> Viveka
>
>
>
>
>
> ________________________________________________________________________________
> Fed up with 56K? Sign up for a FREE BT Broadband connection!
>
--
Brian Barrett
LAM/MPI developer and all around nice guy
Have a LAM/MPI day: http://www.lam-mpi.org/
|