Для gcc, но также для других компиляторов (например, clang) порядок аргументов команды компоновщика имеет значение.Как правило, при составлении команды компоновщика я бы использовал следующий порядок:
- Объектные файлы (* .o)
- Статические библиотеки (* .a)
- Общие библиотеки (* .so)
Порядок общих библиотек также имеет значение.Если libfoo.so зависит от libbar.so, вы должны перечислить -lfoo
перед -lbar
.
Это может быть довольно сложно, если вы не знаете точных зависимостей.Следующая команда на linux может помочь:
ldd /path/to/libfoo.so
Здесь перечислены все общие библиотеки, от которых зависит libfoo.so.
Что касается вашего вопроса, почему эта проблема возникла в вашей конкретной версии gcc,Трудно сказать, не зная, какие библиотеки требует ваше приложение.Но если вы примените порядок, как я описал выше, он должен работать как для более старых, так и для более новых версий gcc.
Подсказка: CMake, если используется правильно, может обработать все эти вещи зависимости для вас ...