компиляция устаревшего пакета c ++: неопределенные ошибки ссылок - PullRequest
2 голосов
/ 13 апреля 2011

Я пытаюсь скомпилировать систему с именем SNoW в Ubuntu, используя g ++ 4.4.5.Похоже, что программное обеспечение было в последний раз обновлено для g ++ 3.1.4, так как я нашел переключатель внутри одного из файлов, который проверил его, и самый высокий регистр был 3.1.4 +.

Мне пришлось обновить несколько заголовков, чтобы избежать ошибок компиляции ... cstring вместо строки и тому подобное.Теперь я застрял на неопределенных ссылочных ошибках, где неопределенная ссылка относится к функции в заголовке, который предоставляется.

Ошибка заключается в следующем:

Main.o: In function `ShowUsage(char const*)':
Main.cpp:(.text+0x140e): undefined reference to `Fex::logo'

... что происходит из этого в Main.cpp:

cerr << Fex::logo[0] << endl;

Где Fex.h включен вверхуMain.cpp, и один из открытых членов класса Fex в Fex.h таков:

static const char * logo[];  

Makefile для Main.o, таким образом:

fex : Main.o 
    $(CC) -O2 -o fex Main.o $(LINKFLAGS)

Main.o : Main.cpp FexGlobalParams.h Fex.h libfex.a
    $(CC) $(CCFLAGS) -o Main.o Main.cpp

Я пытался установить CC на самую раннюю версию g ++ в репозиториях (4.3) и переупорядочить заголовки в Makefile, но безуспешно, и я не уверен, что делать на этом этапе.Я не могу найти существующую копию g ++ 3.1, и создатели программного обеспечения совершенно уверены, что она скомпилирована под Linux в прошлый раз, когда они работали над ней.

Кто-нибудь замечает, что может быть не так, или есть какие-то предложения, чтобы попробовать?

1 Ответ

3 голосов
/ 13 апреля 2011

Несмотря на то, что объявление статического члена может быть в заголовке Fex.h, должно быть где-то одно определение члена (обычно это будет файл Fex.cpp):

const char * Fex::logo[ /* you'll need some size here, too */ ];  

Кажется, я вспоминаю, что GCC автоматически генерирует определение для этих «фантомных» статических членов - возможно, они это изменили (или добавили опцию компилятора)?я думал о GCC , предполагая, что статически размещенные массивы без указанного размера по умолчанию будут иметь один элемент , но это только C.

...