Я играю с созданием исключений на С++, и у меня есть следующий тестовый код:
#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 = С++ 11 -O3 -m64
После компиляции я получаю это предупреждение ld:
ld: предупреждение: прямой доступ в _main к глобальному слабому символу __ZN7MyerrorD1Ev означает, что слабый символ нельзя переопределить во время выполнения. Вероятно, это было вызвано тем, что разные единицы перевода компилировались с разными настройками видимости.
Я не получаю это предупреждение, если использую g++ вместо icpc.
Я не смог понять, что это значит и что вызывает это предупреждение. Код работает, как и ожидалось, однако я хотел бы не обращать внимания на то, что происходит.
#include <string>
? - person jtepe   schedule 14.03.2013-fvisibility=hidden
? - person user2155932   schedule 14.03.2013-fvisibility=hidden
. g++ по умолчанию компилируется со скрытой видимостью. - person user2155932   schedule 15.03.2013