首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >icpc编译程序的故障分割

icpc编译程序的故障分割
EN

Stack Overflow用户
提问于 2016-07-18 18:26:49
回答 1查看 204关注 0票数 0

当我试图运行icpc编译的程序时,我在理解分段错误时遇到了问题。

一个简单的示例由以下文件组成:

代码语言:javascript
复制
// 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);
}
代码语言:javascript
复制
// Filename: include/lib2.h
#include <string>

namespace Lib2 {
  // Give me the version
  std::string VERSION(void);
}
代码语言:javascript
复制
// 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;
}
代码语言:javascript
复制
// 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);
代码语言:javascript
复制
// Filename: src/lib2/lib2.cpp
#include <string>

#include "lib2.h"

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

在这个简单的、愚蠢的例子中,当我使用

代码语言:javascript
复制
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环境变量。但是,当我使用

代码语言:javascript
复制
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

然后节目给我:

代码语言:javascript
复制
[1]    27397 segmentation fault (core dumped) LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./main.out

如果你能帮助我理解和解决这个问题,我将不胜感激。当我在网络上做一些研究时,我偶然发现了一些关于内存访问问题之类的消息来源,但我现在并没有做任何花哨的事情。此外,我尝试使用ddd (我不流利/擅长于gdb)并在那里运行程序,但程序在程序启动后就不可避免地存在分段错误。我甚至无法跟踪程序(是的,在运行ddd之前,我使用了-debug -g交换机)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 21:14:23

碰巧的是,Intel Parallel v16.0.3UbuntuArch Linux平台带来了(已知)问题,不幸的是,这些系统也没有得到官方的支持。

一个快速的解决办法似乎是暂时降级到v16.0.2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38443641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档