簡體   English   中英

icpc編譯程序上的分段錯誤

[英]Segmentation fault on icpc-compiled program

我在嘗試運行icpc編譯的程序時遇到理解分段錯誤的問題。

一個簡單的示例由以下文件組成:

// 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");
}

在這個簡單而愚蠢的示例中,當我使用

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

程序運行正常(前提是我正確修改了LD_LIBRARY_PATH環境變量。但是,當我使用

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

然后程序給我:

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

如果您能幫助我理解和解決此問題,我們將不勝感激。 當我在Web上進行一些研究時,我遇到了一些有關內存訪問問題的消息,但現在我沒有做任何花哨的事情。 此外,我嘗試使用ddd (在gdb我不太流利/不擅長)並在那里運行程序,但是該程序在啟動后立即存在segfault。 我什至無法跟蹤程序(是的,在運行ddd之前,我使用了-debug -g開關)。

碰巧的是, Intel Parallel Studio v16.0.3UbuntuArch Linux平台上存在(已知)問題,不幸的是,這些系統也未得到正式支持。

一種快速的解決方法似乎是暫時降級到v16.0.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM