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,我不会得到这个警告。
我还没有能够理解这是什么意思,什么是导致此警告产生。代码按预期运行,但是我想不想发生什么事情。
答
尝试以下操作:
#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?
你有没有'#include'? –
2013-03-14 06:12:19
你试过用'-fvisibility = hidden'进行编译吗? – user2155932 2013-03-14 06:27:05
@jotep包括字符串没有改变任何东西。 – deepak 2013-03-14 17:24:58