2013-03-14 4 views
6

나는 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 -03 -m64

나는이 LD 경고를 얻고있다

ld : 경고 : _main에서 전역 약한 기호에 직접 액세스 __ZN7MyerrorD1Ev는 런타임에 약한 기호를 무시할 수 없음을 의미합니다. 이는 서로 다른 번역 단위가 다른 가시성 설정으로 컴파일 된 으로 인해 발생했을 가능성이 큽니다.

icpc 대신 g ++를 사용하면이 경고 메시지가 표시되지 않습니다.

나는 이것이 무엇을 의미하는지, 그리고이 경고의 원인이 무엇인지 이해하지 못했습니다. 코드는 예상대로 실행되지만, 나는 원하지 않는 일을하고 싶습니다.

#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 필요합니까 :

+1

당신은 # # 을 포함 했습니까? –

+2

'-fvisibility = hidden'으로 컴파일하려고 했습니까? – user2155932

+0

@jotep 문자열을 포함하여 아무 것도 변경되지 않았습니다. – deepak

답변

1

는 다음과 같은 시도?