Здравствуйте!
Дали мне тут исходники одного проекта, пытаюсь заставить его компилироваться под Linux с помощью gcc.
Первый этап прошел - все исходники смог скомпилировать в o-файлы.
Следующий этап - линковка конечного исполняемого файла. И тут загвоздка. В GCC есть зависимость от перечисления объектников. То есть, объектники надо перечислить в такой последовательности, чтобы при подлинковывании каждого последующего объектника вся информация об используемых функциях уже была известна.
А в этом проекте код организован так, что встречаются файлы A и B, причем в файле A используются функции B, а в B используются функции A (некоторые не так прямо, а по цепочке через другие файлы).
Вариант линковки 1:
gcc -lc -lSDL -lSDL_mixer -o prog a.o b.o
a.o: In function `init':
a.c:(.text+0x1c): undefined reference to `setDefParams'
- ошибка из-за того, что функция setDefParams() определена в b.o, и на момент линковки файла a.o неизвестна.
Вариант линковки 2:
gcc -lc -lSDL -lSDL_mixer -o prog b.o a.o
b.o: In function `openData':
b.c:(.text+0x9c): undefined reference to `printLog'
- ошибка из-за того, что функция printLog() определена в a.o, и на момент линковки файла b.o неизвестна.
Вопрос. Как разрулить такие кольцевые зависимости?