ICPC linking problem on linux

The engine.
Post Reply
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

ICPC linking problem on linux

Post by yg »

I am getting this error which I cannot solve.

Anyone has any ideas?


icpc -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -I/usr/local/include/smile -MM ./singleton_log4cxx.cpp ./dice.cpp > buildfiles.d
icpc -I/usr/local/include/smile -ansi -w1 -O3 -ipo -no-prec-div -xP -ip -unroll -DUSE_INTEL_COMPILER=1 -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -I/usr/local/include/smile -c singl
eton_log4cxx.cpp -o singleton_log4cxx.o
icpc -I/usr/local/include/smile -ansi -w1 -O3 -ipo -no-prec-div -xP -ip -unroll -DUSE_INTEL_COMPILER=1 -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -I/usr/local/include/smile -c dice.
cpp -o dice.o
icpc -o dices -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -lm -llog4cxx -lstdc++ -pthread ./singleton_log4cxx.o ./dice.o /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a
ipo: warning #11043: unresolved _ZN5boost6system20get_generic_categoryEv
Referenced in /usr/tmp/ipo_icpcXCLTvK.o
ipo: warning #11043: unresolved _ZN5boost6system19get_system_categoryEv
Referenced in /usr/tmp/ipo_icpcXCLTvK.o
ipo: warning #11043: unresolved _ZNSi6ignoreEv
Referenced in libsmilearn.a(data_parser.o)
ipo: remark #11000: performing multi-file optimizations
ipo: remark #11006: generating assembly file /usr/tmp/icpcufLrn1as_.s
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::istream::ignore()' follow
gmake: *** [all] Error 1
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Re: ICPC linking problem on linux

Post by shooltz[BayesFusion] »

yg wrote:Anyone has any ideas?
It looks like missing reference to iostreams. You can try adding libstdc++ to the list of libraries your project is using.
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

Re: ICPC linking problem on linux

Post by yg »

shooltz wrote:
yg wrote:Anyone has any ideas?
It looks like missing reference to iostreams. You can try adding libstdc++ to the list of libraries your project is using.
Already doing that:

icpc -o dices -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -lm -llog4cxx -lstdc++ -pthread ./singleton_log4cxx.o ./dice.o /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a

But somehow it does not work which is puzzling.
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Re: ICPC linking problem on linux

Post by shooltz[BayesFusion] »

yg wrote:Already doing that:

icpc -o dices -I/usr/local/include/boost-1_36 -lboost_filesystem-il-mt-1_36 -lm -llog4cxx -lstdc++ -pthread ./singleton_log4cxx.o ./dice.o /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a

But somehow it does not work which is puzzling.
Sorry - I didn't notice the reference to libstdc++. Did you try to replace icpc with icc on that final command line? We build SMILE and our test apps (all C++ code) with single call to icc, without libstd++ reference; the compiler is apparently able to figure it out itself.
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

Post by yg »

Thank you for the help!

Tried with icc, icpc and gcc. All of them give me the same linker error.

$ cc -lboost_filesystem-il-mt-1_36 -lm -llog4cxx -lstdc++ ./singleton_log4cxx.o dice.o /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::basic_istream<char, std::char_traits<char> >::ignore()' follow
collect2: ld returned 1 exit status


$ icc -lboost_filesystem-il-mt-1_36 -lm -llog4cxx -lstdc++ ./singleton_log4cxx.o dice.o /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::istream::ignore()' follow
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Post by shooltz[BayesFusion] »

Can you try to build everything with single icc call?
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

Post by yg »

I copied the example 4 from the tutorial and got this:

$ icc -w0 -I/usr/local/include/smile -lstdc++ -o simlearn4 smilearn4.cpp /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a

/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::istream::ignore()' follow
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Post by shooltz[BayesFusion] »

yg wrote:I copied the example 4 from the tutorial and got this:

$ icc -w0 -I/usr/local/include/smile -lstdc++ -o simlearn4 smilearn4.cpp /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a
Try to remove -lstdc++ from the command line. icc should figure out you're performing C++ compile and link against appropriate library; maybe on your system it's not libstdc++ but glibstdc++.
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

Post by yg »

My system is a slackware 11 machine (Linux styx 2.6.18.8 #2 SMP Thu Mar 15 11:37:13 GMT 2007 i686 i686 i386 GNU/Linux) but that did not work either. I have libstdc++.so.6.0.3 installed.

This is really odd....

styx:~/smile-tutorial
$ icc -w0 -I/usr/local/include/smile -o simlearn4 smilearn4.cpp /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::istream::ignore()' follow
styx:~/smile-tutorial

$ icc -w0 -I/usr/local/include/smile -o simlearn4 smilearn4.cpp /usr/local/lib/libsmile.a /usr/local/lib/libsmilearn.a -lgstdc++
ld: cannot find -lgstdc++
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Post by shooltz[BayesFusion] »

yg wrote:My system is a slackware 11 machine (Linux styx 2.6.18.8 #2 SMP Thu Mar 15 11:37:13 GMT 2007 i686 i686 i386 GNU/Linux) but that did not work either. I have libstdc++.so.6.0.3 installed.
SMILE for icc was built with gentoo. I don't have the access to the VM with this install at the moment, so I can't give you the [g]libstdc++ version at the moment. I'll post it here later today.

In the meantime, can you try to build the tutorial with the following command line?

Code: Select all

icc -I/usr/loca/include/smile -o smilearn4 smilearn4.cpp -lsmilearn -lsmile
yg
Posts: 8
Joined: Wed Sep 17, 2008 3:54 pm

Post by yg »

Many thanks indeed. It could well be something off with Slackware. Here is the output of the compile line above:



/usr/local/include/smile/defcpt.h(19): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_cpt"
class DSL_cpt : public DSL_nodeDefinition
^

/usr/local/include/smile/defcpt.h(19): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_cpt"
class DSL_cpt : public DSL_nodeDefinition
^

/usr/local/include/smile/deftruthtable.h(16): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_truthTable"
class DSL_truthTable : public DSL_cpt
^

/usr/local/include/smile/cidefinition.h(17): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_ciDefinition"
class DSL_ciDefinition : public DSL_nodeDefinition
^

/usr/local/include/smile/defnoisymax.h(17): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_noisyMAX"
class DSL_noisyMAX : public DSL_ciDefinition
^

/usr/local/include/smile/defnoisyadder.h(13): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_noisyAdder"
class DSL_noisyAdder : public DSL_ciDefinition
^

/usr/local/include/smile/deflist.h(19): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_list"
class DSL_list : public DSL_nodeDefinition
^

/usr/local/include/smile/deflist.h(19): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_list"
class DSL_list : public DSL_nodeDefinition
^

/usr/local/include/smile/deftable.h(15): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_table"
class DSL_table : public DSL_nodeDefinition
^

/usr/local/include/smile/deftable.h(15): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_table"
class DSL_table : public DSL_nodeDefinition
^

/usr/local/include/smile/defmau.h(23): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_mau"
class DSL_mau : public DSL_nodeDefinition
^

/usr/local/include/smile/defmau.h(23): warning #654: overloaded virtual function "DSL_nodeDefinition::SetDefinition" is only partially overridden in class "DSL_mau"
class DSL_mau : public DSL_nodeDefinition
^

/usr/local/include/smile/defdemorgan.h(17): warning #654: overloaded virtual function "DSL_nodeDefinition::GetDefinition" is only partially overridden in class "DSL_demorgan"
class DSL_demorgan : public DSL_nodeDefinition
^

/usr/local/include/smile/valbeliefvector.h(14): warning #654: overloaded virtual function "DSL_nodeValue::GetEvidence" is only partially overridden in class "DSL_beliefVector"
class DSL_beliefVector : public DSL_nodeValue
^

/usr/local/include/smile/valbeliefvector.h(14): warning #654: overloaded virtual function "DSL_nodeValue::SetEvidence" is only partially overridden in class "DSL_beliefVector"
class DSL_beliefVector : public DSL_nodeValue
^

/usr/local/include/smile/valbeliefvector.h(14): warning #654: overloaded virtual function "DSL_nodeValue::SetPropagatedEvidence" is only partially overridden in class "DSL_beliefVector"
class DSL_beliefVector : public DSL_nodeValue
^

/usr/local/include/smile/vallistofdecisions.h(13): warning #654: overloaded virtual function "DSL_nodeValue::SetEvidence" is only partially overridden in class "DSL_listOfDecisions"
class DSL_listOfDecisions : public DSL_nodeValue
^

/usr/local/include/smile/vallistofdecisions.h(13): warning #654: overloaded virtual function "DSL_nodeValue::SetPropagatedEvidence" is only partially overridden in class "DSL_listOfDecisions"
class DSL_listOfDecisions : public DSL_nodeValue
^

/usr/local/include/smile/vallistofdecisions.h(13): warning #654: overloaded virtual function "DSL_nodeValue::GetEvidence" is only partially overridden in class "DSL_listOfDecisions"
class DSL_listOfDecisions : public DSL_nodeValue
^

/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x583b): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x58a5): In function `data_parser::GetNextValidInput()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x59bd): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5ae4): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5c5c): In function `data_parser::ReadColumnInfo()':
: undefined reference to `std::istream::ignore()'
/usr/local/lib/libsmilearn.a(data_parser.o)(.text+0x5db8): more undefined references to `std::istream::ignore()' follow
shooltz[BayesFusion]
Site Admin
Posts: 1417
Joined: Mon Nov 26, 2007 5:51 pm

Post by shooltz[BayesFusion] »

My gentoo install has both libstdc++.so.6.0.3 and libstdc++.so.6.0.8. The latter one comes with gcc 4.1.1 and it's likely (but not 100% certain) that it was on the library search path when SMILE's icc build was compiled.
Post Reply