C ++异常和ld符号警告

时间:2013-03-14 05:59:11

标签: c++ exception ld icc

我正在玩C ++中创建异常,我有以下测试代码:

#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 个答案:

答案 0 :(得分:1)

尝试以下方法:

#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?