Я столкнулся со сторонней библиотекой, написанной на смеси C / C ++, где большинство ее заголовков имеют суффикс имени файла .h, где суффикс .hpp будет более подходящим.
Использование этого третьегосторонняя библиотека из cgo должна быть возможной, поскольку она почти не использует абстракции C ++ более высокого уровня, но файлы заголовков должны быть скомпилированы компилятором C ++, в противном случае процесс компиляции завершится неудачей.
Я могу заставить работать cgoвынуждая его использовать компилятор C ++ для кода C следующим образом:
env CC=g++ go build
, но как только я фактически начинаю использовать библиотеку из кода go, этот подход не работает, потому что cgo генерирует код C, который не может бытькомпилируется, когда CC установлен как g ++.Если я создаю только файлы _cgo_export.c и _cgo_export.h с:
env CC=g++ go tool cgo
, а затем вручную компилирую их с помощью gcc, компиляция работает нормально.
Так что мой вопрос здесь окакие параметры я должен сообщить cgo о том, какие файлы компилировать как файлы C ++, а какие файлы компилировать как файлы C?
Есть ли способ специально сообщить cgo о неправильно названных заголовках C ++ и о том, что он должен компилироватьсятолько те файлы с C ++ вместо компилятора C?