0
votes

I am having problems understanding the segmentation fault I receive when trying to run icpc-compiled programs.

A simple example consists of the following files:

// Filename: include/lib1.h
#include <string>

namespace Lib1 {
  // Template initialization, T: int, double
  template< typename T>
    T function1( T x, T y );

  // Give me the version
  std::string VERSION(void);
}
// Filename: include/lib2.h
#include <string>

namespace Lib2 {
  // Give me the version
  std::string VERSION(void);
}
// Filename: src/main.cpp
#include <iostream>
#include <string>

#include "lib1.h"
#include "lib2.h"

int main( int argc, char* argv[] ) {
  std::cout << "Lib1::VERSION() :" << Lib1::VERSION()
            << std::endl;
  std::cout << "Lib2::VERSION() :" << Lib2::VERSION()
            << std::endl;

  double x = 1., y = 2.;

  std::cout << "Lib1::function1(x, y): "
            << Lib1::function1(x, y)
            << std::endl;

  return 0;
}
// Filename: src/lib1/lib1.cpp
#include <string>

#include "lib1.h"

template< typename T >
T Lib1::function1( T x, T y ) {
  return x * y;
}

std::string Lib1::VERSION(void) {
  return std::string("v0.0.2");
}

// Instantiation for dynamic library
template double Lib1::function1(double, double);
template int Lib1::function1(int, int);
// Filename: src/lib2/lib2.cpp
#include <string>

#include "lib2.h"

std::string Lib2::VERSION(void) {
  return std::string("v0.0.1");
}

In this simple, stupid example, when I compile the files using

clang++ -Wall -c -fPIC -I include -o liblib1.o src/lib1/lib1.cpp
clang++ -Wall -shared -o liblib1.so liblib1.o
clang++ -Wall -c -fPIC -I include -o liblib2.o src/lib2/lib2.cpp
clang++ -Wall -shared -o liblib2.so liblib2.o
clang++ -Wall -o main.out -I include -L ./ -llib1 -llib2 src/main.cpp

the program runs fine (provided that I modify my LD_LIBRARY_PATH environment variable properly. However, when I use

icpc -Wall -c -fPIC -I include -o liblib1.o src/lib1/lib1.cpp
icpc -Wall -shared -o liblib1.so liblib1.o
icpc -Wall -c -fPIC -I include -o liblib2.o src/lib2/lib2.cpp
icpc -Wall -shared -o liblib2.so liblib2.o
icpc -Wall -o main.out -I include -L ./ -llib1 -llib2 src/main.cpp

then the program gives me:

[1]    27397 segmentation fault (core dumped) LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./main.out

I would appreciate if you helped me understand and solve this problem. When I did some research on the web, I came across some sources talking about memory access problems and such, but I am not doing anything fancy right now. Moreover, I tried using ddd (I am not fluent/good in gdb) and running the program there, but the program exists with the segfault immidiately after the program start. I cannot even trace the program (yes, prior to running ddd, I used -debug -g switches).

1
I am sorry @NathanOliver, but I could not understand the problem. In the link provided, the solution is exactly the same as what I have done in providing the above examples.Arda Aytekin

1 Answers

0
votes

It happened to be the case that Intel Parallel Studio v16.0.3 has (known) issues for Ubuntu and Arch Linux platforms, and unfortunately these systems are not officially supported, either.

One fast workaround seems to be to downgrade to v16.0.2 for now.