当我试图运行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如果你能帮助我理解和解决这个问题,我将不胜感激。当我在网络上做一些研究时,我偶然发现了一些关于内存访问问题之类的消息来源,但我现在并没有做任何花哨的事情。此外,我尝试使用ddd (我不流利/擅长于gdb)并在那里运行程序,但程序在程序启动后就不可避免地存在分段错误。我甚至无法跟踪程序(是的,在运行ddd之前,我使用了-debug -g交换机)。
发布于 2016-07-19 21:14:23
碰巧的是,Intel Parallel v16.0.3为Ubuntu和Arch Linux平台带来了(已知)问题,不幸的是,这些系统也没有得到官方的支持。
一个快速的解决办法似乎是暂时降级到v16.0.2。
https://stackoverflow.com/questions/38443641
复制相似问题