Как обращаться с ошибочно названными включениями в cgo? - PullRequest
0 голосов
/ 06 июня 2018

Я столкнулся со сторонней библиотекой, написанной на смеси 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?

...