У меня есть мой проект, который сейчас компилируется под gcc. Он использует Boost, ZeroMQ как статические библиотеки .a
и некоторые библиотеки .so
, такие как SDL. Я хочу идти, но не сейчас. Интересно, можно ли скомпилировать код, который использует .a
и .so
библиотеки, которые были скомпилированы под gcc с clang?Может ли компилировать код Clang с GCC скомпилированными .a libs?
ответ
Да, вы обычно можно использовать clang
с GCC скомпилированные библиотеки (и наоборот, использовать gcc
с лязгом скомпилированных библиотек), потому что на самом деле это не компиляцией, но linking, которая имеет отношение. Вам может быть не повезло и получить неприятные сюрпризы.
В принципе вы можете иметь некоторые зависимости от версии libstdc++
, используемой для связывания соответствующих библиотек (если они закодированы на C++). Собственно, это обычно не имеет большого значения.
В C++ name mangling теоретически может быть проблемой (могут быть некоторые угловые случаи, даже несовместимости между двумя разными версиями g++
). Опять же, на практике это обычно не проблема.
Как правило, вы можете смешивать CLANG (даже разные, но близкие версии) с GCC, но у вас могут быть неприятные сюрпризы. То, что следует ожидать от любого компилятора C++ (будь то CLANG или GCC), - это просто возможность компилировать и связывать все программное обеспечение (и все библиотеки) вместе, используя тот же компилятор и версию. Вот почему обновление компилятора в дистрибутиве - это большая работа: производители должны убедиться, что все пакеты скомпилированы (и они действительно удивляют!).
По крайней мере, для Crypto++ library это не работает (проверено :-() Так что для кода на C++ это менее вероятно, будет работать, в то время как чистый с код, вероятно, связать OK
EDIT:.. Проблема начала появляться с Mac OS X 10.9 Mavericks и Xcode-5, которые переключили стандартную C++-библиотеку для clang из libstdC++ в libC++. Она не существовала в Mac OS X 10.8 и более ранних версиях.
Решение выглядит следующим образом: если вам нужно скомпилировать C++-код с clang и связать его с gcc-скомпилированной библиотекой, используйте «clang ++ -stdlib = libstdC++». Связывание выполняется успешно, и результирующий двоичный файл выполняется правильно.
CAVEAT: похоже, что это не так: даже если вы можете собрать библиотеку, скомпилированную с помощью «clang ++ -stdlib = libstdC++» и связать с ней код gcc-скомпилированный код, этот код будет сбой с помощью SEGV. До сих пор я нашел, что единственный способ связать с clang-compiled библиотекой - это компиляция вашего кода с помощью clang, а не gcc.
На самом деле libvpx может быть скомпилирован с gcc, а затем связан со стандартным LLVM-компилятором Objective-C. Вещь, в которой вы нуждаетесь, - это статическая ссылка с их libstdC++/libC++. Это не является неприемлемым - в то время как вы не меняете данные malloc'ed, он будет работать нормально! Но кто сейчас меняет динамические данные между библиотеками? :-) –
- 1. Компилировать программу, используя Makefile с gcc вместо clang
- 2. GCC - не компилировать неиспользуемый код
- 3. Странное поведение с предварительно скомпилированными заголовками gcc
- 4. компилировать .c с gcc
- 5. Может ли компилятор компилировать код без расширения?
- 6. Clang (LLVM) компилировать с инфраструктурами
- 7. clang не скомпилировал код, который gcc компилирует
- 8. Может ли clang/gcc оптимизировать деревья связанных списков?
- 9. Уменьшить время компиляции clang с предварительно скомпилированными заголовками
- 10. Компиляция с clang вместо gcc
- 11. Код компилируется с clang, но не с gcc
- 12. OSX GCC не находя установленный LIBS
- 13. Clang построен на GCC
- 14. Как компилировать GCC без _alloca?
- 15. Попытка захватить C байт-код ... делает/может GNU/gcc производить C байт-код, как Clang/LLVM?
- 16. компилировать код qt с помощью gcc в ubuntu
- 17. Может ли GCC компилировать и запускать исходный код без создания объекта или исполняемых файлов?
- 18. Не удалось компилировать __thread с помощью ndk clang 3.4/3.5
- 19. Может ли GCC собрать GIMPLE?
- 20. Какой c-диалект может позволить GCC компилировать какую-нибудь забаву (...)?
- 21. Компилировать сборку intel с помощью gcc/mingw
- 22. Компилировать библиотеки Microsoft Visual Studio Windows с использованием GCC или Clang
- 23. Этот код действителен или нет? GCC и Clang не согласны
- 24. Почему не будет компилировать мой код?
- 25. Gcc компилировать hello.c для c6x
- 26. Разница между clang и gcc
- 27. Может ли Java компилировать исходный код без JVM?
- 28. Является ли clang автономным компилятором C или ему нужен gcc?
- 29. Компиляция в clang, но не gcc?
- 30. Fedora 21 с clang, без gcc
Не упоминая о каких-то неприятных сюрпризах, вы выглядите как сотрудник Apple. –
Я не был и никогда не был сотрудником Apple. Вы можете найти информацию обо мне на http://starynkevitch.net/Basile/; Я вношу свой вклад в GCC (и работаю над [MELT] (http://gcc-melt.org/) ...) –
Жаль, мужик! RMS тоже не цветок))) –