Предположим, у меня есть библиотека, скомпилированная с компилятором A. Она выделяет память с помощью malloc()
и оставляет ее мне до free()
. Он не предоставляет специальной бесплатной функции.Совместимость free/malloc между компиляторами
Могу ли я скомпилировать мою программу (которая использует эту библиотеку) с компилятором B? Или мне нужно беспокоиться о том, что один компилятор (стандартная библиотека) malloc
несовместим с другим free
?
В дополнении к общему вопросу, который я также хотел бы знать ответ специально для этих компиляторов: система лязг на OS X с НКОЙ MacPorts' 4,9 или 5.
Вообще говоря, библиотека, скомпилированная с компилятором A, * не * совместима с компилятором B. Даже если компиляция завершается успешно, нет гарантии, что сгенерированная программа будет работать правильно. При этом clang действительно стремится к совместимости с gcc, поэтому он может работать *, однако это поведение полностью зависит от компилятора и должно быть проверено специально в вашем случае. – UnholySheep
@UnholySheep Ваш комментарий неверен практически для всех, кроме Windows. Для обеспечения совместимости есть нечто, называемое ABI. Это немного более нечеткое в Windows, где разные поставщики компиляторов имеют/имеют разные соглашения о вызовах, но в UNIX-подобных операционных системах для каждой операционной системы всегда существовал один ABI, поэтому библиотеки, созданные одним компилятором, могут взаимодействовать с библиотеками, скомпилированными другим один. Конечно, вы можете целенаправленно сломать это, если попытаетесь очень тяжело, но он работает во всех случаях, кроме таких случаев. – fuz
Clang и GCC играют отлично на MacOSX. В обоих случаях 'malloc' и' free' предоставляются libc.dylib - который поставляется с операционной системой, а не с компилятором. Если вы компилируете C++, вы можете даже смешивать и сопоставлять libC++ и CLU clang libstdC++ вместе в одном и том же исполняемом файле. Также имейте в виду, что если вы установили опцию командной строки Xcode, вызов gcc из командной строки фактически даст вам «clang», и подавляющее большинство времени это не проблема. – marko