gram z tworzenia wyjątków w C++ i mam następujący kod testowy:C++ wyjątek i ld symbol ostrzegawczy
#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?");
}
Mam kompilacji to z:
ICPC -std = c + +11 -O3 -m64
Po kompilacji otrzymuję to ostrzeżenie ld:
ld: ostrzeżenie: bezpośredni dostęp w _main do globalnego słabego symbolu __ZN7MyerrorD1Ev oznacza, że słaby symbol nie może zostać nadpisany w czasie wykonywania. Prawdopodobnie spowodowało to, że różne jednostki tłumaczeniowe były skompilowane z różnymi ustawieniami widoczności.
Nie otrzymam tego ostrzeżenia, jeśli używam g ++ zamiast icpc.
Nie byłem w stanie zrozumieć, co to oznacza i co powoduje generowanie tego ostrzeżenia. Kod działa zgodnie z oczekiwaniami, jednak chciałbym nie podrobić tego, co się dzieje.
Czy "#include"? –
Czy próbowałeś skompilować z '-fvisibility = hidden'? – user2155932
@jotep W tym ciąg nic nie zmienił. – deepak