Ни в одном из других ответов (пока) не упоминается важная функция, которая способствует взаимодействию между компиляторами и библиотеками - ABI или двоичный интерфейс приложения.На Unix-подобных машинах имеется хорошо документированный ABI, и все компиляторы C в системе следуют ABI.Это позволяет много смешивать.Обычно вы используете предоставляемую системой библиотеку C, но вы можете использовать замещающую версию, поставляемую с компилятором или созданную отдельно.Как правило, вы можете использовать библиотеку, скомпилированную одним компилятором, с программами, скомпилированными другими компиляторами.
Иногда один компилятор использует библиотеку поддержки времени выполнения для некоторых операций - возможно, 64-битные арифметические процедуры на 32-битной машине,Если вы используете библиотеку, созданную с помощью этого компилятора, как часть программы, созданной с помощью другого компилятора, вам может потребоваться связать эту библиотеку.Однако я давно не видел в этом проблемы - с чистым C.
Связывание C ++ - это другое дело.Не существует одинаковой степени взаимодействия между различными компиляторами C ++ - они не согласны с деталями макета класса (vtables и т. Д.), А также с тем, как выполняется обработка исключений и так далее.Вам нужно больше работать над созданием библиотек, созданных с помощью одного компилятора C ++, который может использоваться другими.