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

Linker error with OpenCV libraries while using ICC

zvonimir_b_
Beginner
648 Views

Hello
 

I am trying to run a test program using ICC in Eclipse. I previously ran the same program with GCC and it worked fine but now when I am building it with ICC and ICC built OpenCV libraries I get the following error:

**** Incremental Build of configuration Debug for project DisplayImage_Intel ****
make all 
Building target: libDisplayImage_Intel.so
Invoking: Intel C++ Linker
icpc -L/home/mninicfe/OpenCV_intel/opencv-3.0.0/IntelBuild/install/lib/ -shared -o "libDisplayImage_Intel.so"  ./src/DisplayImage_Intel.o   -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_highgui
ld: ./src/DisplayImage_Intel.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
./src/DisplayImage_Intel.o: could not read symbols: Bad value
make: *** [libDisplayImage_Intel.so] Error 1

 

My program code looks like this:

//#include <cv.h>
//#include <highgui.h>

#include <opencv2/opencv.hpp>
#include <stdio.h>

using namespace cv;

int main( int argc, char** argv )
{
  Mat image;
  image = imread( argv[1], 1 );

  if( argc != 2 || !image.data )
    {
      printf( "No image data \n" );
      return -1;
    }

  namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
  imshow( "Display Image", image );

  waitKey(0);

  return 0;
}

I tried to solve this problem by adding these flags and building OpenCV from the beginning but it didn't help: 
COMPILE_FLAGS+=-fPIC
export CFLAGS="$CFLAGS -fPIC"
export CXXFLAGS="$CXXFLAGS -fPIC"

Any help would be appreciated.

0 Kudos
4 Replies
zvonimir_b_
Beginner
648 Views

Managed to get it working by creating a fresh project with the following:
 

  • project properties -> c/c++ build -> settings -> tool settings -> preprocessor -> additional include directories:
     /home/mninicfe/OpenCV_intel/opencv-3.0.0/IntelBuild/install/include/opencv
     /home/mninicfe/OpenCV_intel/opencv-3.0.0/IntelBuild/install/include
  • project properties -> c/c++ build -> settings -> tool settings -> libraries-> additional libraries:
     opencv_core
     opencv_imgcodecs
     opencv_highgui
     opencv_imgproc
  • project properties -> c/c++ build -> settings -> tool settings -> libraries-> additional libraries:
     /home/mninicfe/OpenCV_intel/opencv-3.0.0/IntelBuild/install/lib
  • project properties -> c/c++ build -> settings -> tool settings -> code generation -> tick "Generate Position Independant Code (-fpic)
  • run configurations -> c++ aplication -> Arguments: lena.jpg
  • run configurations -> c++ aplication -> environment -> LD_LIBRARY_PATH | /home/mninicfe/OpenCV_intel/opencv-3.0.0/IntelBuild/install/lib/
0 Kudos
Judith_W_Intel
Employee
648 Views

 

I think -fPIC needs to be added to the linker flags also, i.e. from https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html:

 

-shared
Produce a shared object which can then be linked with other objects to form an executable. Not all systems support this option. For predictable results, you must also specify the same set of options used for compilation (-fpic, -fPIC, or model suboptions) when you specify this linker option.

 

0 Kudos
zvonimir_b_
Beginner
648 Views

Yeah i forgot to add maybe the most important thing in the post above:

  • Eclipse -> project properties -> c/c++ build -> settings -> tool settings -> code generation -> tick "Generate Position Independant Code (-fpic)

It's edited and added now. Problem solved, you can close this topic :)

0 Kudos
KitturGanesh
Employee
648 Views

That's a good point, Judy. 

@zvonimir:  Great to know it's resolved and yes will close this thread, appreciate much. -Kittur

0 Kudos
Reply