Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

Trouble linking on Linux

lkeene
Beginner
386 Views
Hi everyone.

This is actually a post from the IPP forum. I haven't had a response despite 60 people reading the post so I thought maybe someone on this forum would know the answer. I'm using Intel Compiler 11.1 on RedHat and trying to link to the IPP libraries. I'm very inexperienced with both Linux as well as operating the compiler from the command line (up until now all of my work has been Visual Studio based).

I'm having a hell-of-a-time getting the Intel compiler to link properly to the IPP *.a files. I've been successful doing this on my Windows machine using VS2008, but I ran into trouble when I moved over to Linux and ICC command line mode.

When I compile my project I get a bunch of errors all like "undefined reference to 'ippsSVD_64f_D2'", "undefined reference to 'ippmTranspose_64f;", etc. To try to remedy these errors I've done the following:

1) "export LD_LIBRARY_PATH=/opt/intel/Compiler/11.1/059/ipp/ia32/sharedlib:$LD_LIBRARY_PATH" in command line. This was from the IPP documentation.

2) Added the following to the compiler invocation statement:

"-L/opt/intel/Compiler/11.1/059/ipp/ia32/lib libippsemerged.a libippsmerged.a libippsremerged.a libippsrmerged.a libippmemerged.a libippmmerged.a libippcore.a"


Upon compiling I get several errors of the following:
"icpc: error #10236: File not found: 'libippsemerged.a'"
"icpc: error #10236: File not found: 'libippsmerged.a'"
.
.
etc


I've made some progress by getting rid of the "-L/..." option (which I don't think I was using properly) and have instead listed the entire path prior to each lib file as in:

"/opt/intel/Compiler/11.1/059/ipp/ia32/lib/libippsemerged.a /opt/intel/Compiler/11.1/059/ipp/ia32/lib/libippsmerged.a /opt/etc..."

I no longer get the "Cannot find file" errors, but now I'm getting errors of the following:

"/opt/intel/Compiler/11.1/059/ipp/ia32/lib/libippsrmerged.a(ippssvd_split_g9_ippsSVD_64f_D2_I.o): In function 'g9_ippsSVD_64f_D2_I':
ippssvd_split_g9_ippsSVD_64f_D2_I.i:(text+0x6e): undefined reference to 'g9_ipp_sMalloc_64f'
ippssvd_split_g9_ippsSVD_64f_D2_I.i:(.text+0x134d): undefined reference to 'g9_ippsFree'
etc...

Anyone have any ideas what could be the problem? As always, thanks.
-L
0 Kudos
3 Replies
barragan_villanueva_
Valued Contributor I
386 Views
Quoting - lkeene
1) "export LD_LIBRARY_PATH=/opt/intel/Compiler/11.1/059/ipp/ia32/sharedlib:$LD_LIBRARY_PATH" in command line. This was from the IPP documentation.

2) Added the following to the compiler invocation statement:

"-L/opt/intel/Compiler/11.1/059/ipp/ia32/lib libippsemerged.a libippsmerged.a libippsremerged.a libippsrmerged.a libippmemerged.a libippmmerged.a libippcore.a"

Hi,

From1)your application will be built with dynamic libraries on Linux.
But in 2) you just added static library files.

Please try using options -l(if this libraries are correctly listed):
-lippsemerged -lippsmerged -lippsremerged -lippsrmerged -lippmemerged -lippmmerged -lippcore

0 Kudos
lkeene
Beginner
386 Views
Hi,

From1)your application will be built with dynamic libraries on Linux.
But in 2) you just added static library files.

Please try using options -l(if this libraries are correctly listed):
-lippsemerged -lippsmerged -lippsremerged -lippsrmerged -lippmemerged -lippmmerged -lippcore


Hello Victor, and thank you for the reply!

I'm afraid I don't fully understand your instructions. I'm actually trying to link statically...should I then execute a different command in "1)"? If so, what is the proper command?

Lastly, what is meant by "-I"?

Thank in advance for the help,
L
0 Kudos
Yuan_C_Intel
Employee
386 Views
Quoting - lkeene

Hello Victor, and thank you for the reply!

I'm afraid I don't fully understand your instructions. I'm actually trying to link statically...should I then execute a different command in "1)"? If so, what is the proper command?

Lastly, what is meant by "-I"?

Thank in advance for the help,
L

Hi, lkeene

I think Victor refers to-l instead of -I. See user guide:

l

Tells the linker to search for a specified library when linking.

Syntax
Linux and Mac OS X: -lstring

Arguments
string Specifies the library (libstring) that the linker should search.

Also youmay add option "-static" to avoid link with shared libraries. Try:
-lippsemerged -lippsmerged -lippsremerged -lippsrmerged -lippmemerged -lippmmerged -lippcore -static

Thanks.
0 Kudos
Reply