C++异常和ld符号警告

问题描述:

我在玩与创建使用C异常++,我有以下的测试代码:C++异常和ld符号警告

#include <iostream> 
#include <stdexcept> 
#include <new> 
using namespace std; 

class Myerror : public runtime_error { 
    private: 
     string errmsg; 
    public: 
     Myerror(const string &message): runtime_error(message) { } 
}; 

int main(int argc, char *argv[]) { 
    throw Myerror("wassup?"); 
} 

我与编译如下:

ICPC -std = C + +11 -O3 -m64

在编译时我得到这个LD警告:

ld:警告:在_main中直接访问全局弱符号 __ZN7MyerrorD1Ev表示弱符号不能在运行时被覆盖。这可能是由不同的可见性设置编译的不同翻译单元 造成的。

如果我用g ++代替icpc,我不会得到这个警告。

我还没有能够理解这是什么意思,什么是导致此警告产生。代码按预期运行,但是我想不想发生什么事情。

+1

你有没有'#include '? – 2013-03-14 06:12:19

+2

你试过用'-fvisibility = hidden'进行编译吗? – user2155932 2013-03-14 06:27:05

+0

@jotep包括字符串没有改变任何东西。 – deepak 2013-03-14 17:24:58

尝试以下操作:

#include <iostream> 
#include <stdexcept> 
#include <new> 
using namespace std; 

class Myerror : public runtime_error { 
    public: 
     Myerror(const string &message) throw(): runtime_error(message) { } 
     virtual ~Myerror() throw() {} 
}; 

int main(int argc, char *argv[]) { 
    throw Myerror("wassup?"); 
} 

为什么你需要未使用的字符串ERRMSG?