Ответ, отправленный здесь Джонатаном Уэйкли, верен и для Clang.
Простой ответ : если вы компилируете оба объекта самостоятельно, выбранный вами вариант -std
не повлияет на конечный результат.
Большая часть заданного C ++ ABI определяется стандартной библиотекой. Остальная часть - это поддержка различных сред выполнения, таких как исключения, встроенные компиляторы (которые могут фактически отправляться в стандартную библиотеку) и тому подобное. libstdc++
Совместимость с ABI - явная цель для Clang, так что все в порядке.
Если вы используете ту же версию компилятора, опция -std
изменит то, какие символы открываются для кода при компиляции. Однако ABI-библиотека libstdc ++ для стабильных функций совместима с предыдущими версиями, поэтому с вами тоже все будет в порядке.
Трудный ответ : Ваши комментарии предполагают, что у вас есть источник, но если у вас есть только объектные файлы и вы просто делаете последнюю ссылку, есть большая вероятность, что она будет работать, если только версия Clang не использовалась для сборки std=c++11
объект очень старый. Авторы g++
и libstdc++
старались изо всех сил использовать символы версий, поэтому шансы на то, что у вас есть что-то, связывающее, но затем не поддающееся трудному диагностированию, в основном равны нулю. (Об этом говорится в последнем абзаце в ответе Джонатана).
Опять же, поскольку Clang стремится поддерживать совместимость с ABI libstdc++
, с вами все будет в порядке. Есть и другие детали, но подавляющее большинство адресовано в ответе Джонатана, и он в лучшем положении, чтобы объяснить это, чем я.