Неопределенные символьные ошибки при компоновке проекта C ++ с использованием Eclipse - PullRequest
1 голос
/ 13 октября 2009

Я скомпилировал один проект C ++, который трансплантирован из другого проекта, и есть некоторые неопределенные символьные предупреждения при компоновке после компиляции. Дело в том, что эти предупреждения такие странные. Они делятся на 2 типа:

Тип 1:

dld: warning: Undefined symbol **'__record_needed_destruction'** in file './xxx/xx.o'
dld: warning: Undefined symbol **'__memzero'** in file './xxx/xyy.o'
dld: warning: Undefined symbol **'__vec_delete'** in file './xxx/xyz.o'
dld: warning: Undefined symbol **'__vec_new'** in file './xxx/yy/xxx/yyy.o'
dld: warning: Undefined symbol **'__pure_virtual_called'** in file './xxx/zzz.o'

Ключевым моментом является то, что эти символы не использовались в исходном коде. Каковы точные средства против этого?

Тип 2:

dld: warning: Undefined symbol in file './xxx/x1.o', './xxx/x2.o', './xxx/x3.o':
    nothrow__3std
    **std::nothrow**

Исходный код ниже:

ApplicationSystem* pApplicationSystem = **new(std::nothrow)** ApplicationSystem{
.....
.....
}

Подобные операторы появляются в 3 файлах cpp. Что-то не так с использованием std :: nothrow?

1 Ответ

4 голосов
/ 13 октября 2009

После компиляции компоновщик ваших объектных файлов (.o) должен связать их и заменить все имена символов (например, вызовы функций) адресами из библиотек. Но в вашем случае он не может разрешить эти адреса.

Похоже, вы не упомянули stdc ++ среди библиотек.

Возможно, вам потребуется установить тип проекта как C ++, или задать имя компилятора g ++ вместо gcc, или добавить параметр -lstdc ++ в командную строку, используемую eclipse для сборки.

...