Неверный отчет о «нескольких определениях» - PullRequest
1 голос
/ 28 августа 2011

Я работал над кроссплатформенной библиотекой на C ++. Я компилировал как в Windows (MinGW / msys), так и в Ubuntu (g ++), и он компилируется без ошибок.

Я только что получил руку на компьютере с Kubuntu. Когда я пытаюсь скомпилировать его там, я получаю несколько ошибок, говорящих о том, что у меня есть несколько определений для некоторых переменных. Эти переменные определены extern в заголовочном файле и определены в одном cpp в одной строке.

./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:16: multiple definition of `AoTK::disp'
./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:12: first defined here

Код в aotk_unix.cpp имеет только одно определение disp, а в строках 12 и 16 нет ссылок на disp.

Я не понимаю, почему не удается связать, в то время как точно такой же код прекрасно компилируется на другой * nix-машине.

1 Ответ

1 голос
/ 28 августа 2011

Я понял это с помощью комментария bdonlans.Проблема была в моем make-файле при создании lib-архива.Я использовал команду

ar -cvq 

, которая не перезаписывала существующие файлы в архиве, при изменении на

ar -cr

она связывает без ошибок

...