Использование Cygwin для сборки - Шаблон с C Linkage - PullRequest
1 голос
/ 07 ноября 2010

Я пытаюсь собрать некоторые из моих плагинов для Linux, используя Cygwin (продолжайте ломать виртуальные машины Linux, поэтому я решил попробовать настроить Cygwin, так как мне не пришлось бы перемещать все мои SDK, а что нет). Все выглядело нормально, за исключением того, что я получил ошибку «gcc: ошибка при попытке выполнить cc1plus: нет такого файла или каталога», поэтому я установил g ++ 4.3 поверх gcc 4.3. Как только я это сделал, я получаю тонны ошибок сейчас. Основными спамами являются ...

ошибка: шаблон с C-связью ошибка: шаблон со специализацией с C Linkage

Это спам на файлах из SDK, которые тысячи других людей используют для компиляции, так что я знаю, что это не «болтается снаружи», но я предполагаю, что пропустил пакет или что-то еще. В Ubuntu установка build-essential решает любую из этих проблем, но я в затруднении с Cygwin. Любая помощь будет высоко ценится.

Редактировать

Ампаста точных ошибок, которые он издает http://www.ampaste.net/m3d0a864f

Первый из Sourcehook.h объясняется тем, что linux , по-видимому, не определен в Cygwin, но остальные из 'hl2sdk' приводят меня в затруднение.

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

@ Mr. Ree: «Исходные файлы C ++ обычно используют один из суффиксов .C, .cc, .cpp, .CPP, .c ++, .cp или .cxx; заголовочные файлы C ++ часто используют .hh, .hpp,. H или (для общего кода шаблона) .tcc; и предварительно обработанные файлы C ++ используют суффикс .ii. GCC распознает файлы с этими именами и компилирует их как программы C ++, даже если вы вызываете компилятор таким же образом что касается компиляции программ на C (обычно с именем gcc) . " GCC уже давно называется сборником компиляторов GNU. http://linux.die.net/man/1/gcc

0 голосов
/ 07 ноября 2010

Я знаю, что вы сказали, что нет никакого висящего внешнего "C" ... Но почему это может быть проблемой, учитывая, как вы компилируете с gcc , а не g ++ ??? (Который, на самом деле, с радостью обработает smsdk_ext.cpp как C и НЕ C ++ файл... Со всеми ошибками и болью, которые возникают из-за этого ...)


Часто вы будете видеть такие сообщения об ошибках, когда неправильные включаемые файлы помечены extern "C" ,(Или неправильно помечены в зависимости от обстоятельств.)

Ваши сообщения об ошибках также указывают на сложность перегрузки функций ...

platform.h: In function ‘double fsel(double, double, double)’:
platform.h:470: error: declaration of C function 'double fsel(double, double, double)'
conflicts with
platform.h:466: error: previous declaration 'float fsel(float, float, float)'

И проблемы с системными файлами (компилятором).

In file included from /usr/include/sys/signal.h:104,
            from /usr/include/signal.h:5,
            from /usr/include/pthread.h:15,
            from /cygdrive/...
/usr/include/cygwin/signal.h:74: error: expected ‘;’ before ‘*’ token
/usr/include/cygwin/signal.h:97: error: ‘uid_t’ does not name a type

In file included from /usr/include/signal.h:5,
            from /usr/include/pthread.h:15,
            from /cygdrive/...
/usr/include/sys/signal.h:163: error: ‘pthread_t’ was not declared in this scope
/usr/include/sys/signal.h:163: error: expected primary-expression before ‘int’
/usr/include/sys/signal.h:163: error: initializer expression list treated as compound expression

Таким образом, либо установка вашего компилятора действительно неработоспособна, ИЛИ ...


В качестве альтернативы, другой подход - начать с минимального Hello World Запрограммируйте и посмотрите, скомпилируется ли это.Затем наращивайте, включая то, что вам нужно, пока не столкнетесь с проблемой.(Или возьмите существующее программное обеспечение и упростите его, пока не найдете проблемную область. Начните с одной строки "g ++" , скопируйте файл и уменьшайте его до тех пор, пока проблема не исчезнет. Возможно, у вас есть # define или typedef , что конфликтует с чем-то в системном файле.)

...