C++;异常和ld符号警告 我正在玩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?"); } #包括 #包括 #包括 使用名称空间std; 类Myerror:公共运行时错误{ 私人: 字符串errmsg; 公众: Myerror(常量字符串和消息):运行时错误(消息){} }; int main(int argc,char*argv[]){ 抛出我的错误(“wassup?”); }

C++;异常和ld符号警告 我正在玩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?"); } #包括 #包括 #包括 使用名称空间std; 类Myerror:公共运行时错误{ 私人: 字符串errmsg; 公众: Myerror(常量字符串和消息):运行时错误(消息){} }; int main(int argc,char*argv[]){ 抛出我的错误(“wassup?”); },c++,exception,ld,icc,C++,Exception,Ld,Icc,我是用以下方法编写本文件的: icpc-std=c++11-O3-m64 编译后,我收到以下ld警告: ld:警告:直接访问全局弱符号 __ZN7MyerrorD1Ev表示无法在运行时重写弱符号。这可能是由于使用了不同的翻译单位 使用不同的可见性设置编译 如果我使用g++而不是icpc,则不会收到此警告 我无法理解这意味着什么,以及是什么导致了这一警告的产生。代码按预期运行,但是我想取消设置和正在发生的事情 尝试以下操作: #include <iostream> #include &

我是用以下方法编写本文件的:

icpc-std=c++11-O3-m64

编译后,我收到以下ld警告:

ld:警告:直接访问全局弱符号 __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?");
}
#包括
#包括
#包括
使用名称空间std;
类Myerror:公共运行时错误{
公众:
Myerror(常量字符串和消息)throw():运行时错误(消息){}
虚拟~Myerror()抛出(){}
};
int main(int argc,char*argv[]){
抛出我的错误(“wassup?”);
}

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

您是否
#include
?您是否尝试使用
-fvisibility=hidden
进行编译?@jotep include string没有更改任何内容。@user2155932谢谢,这很有帮助!命令做了什么?为什么符号可见性只是在上面的例子中才有问题,而对于我编译的任何其他代码都没有问题?@deepak-Well,看起来就像它说的那样:不同的翻译单元是用不同的可见性设置编译的。很可能,您的一些lib(可能是libstdc++)是使用
-fvisibility=hidden
编译的。默认情况下,g++以隐藏可见性进行编译。