使用Cygwin构建 - 带C链接的模板

时间:2010-11-07 00:29:51

标签: c++ gcc g++ cygwin

我正在尝试使用Cygwin为Linux构建一些我的插件(继续搞砸Linux虚拟机,所以我决定尝试设置Cygwin,因为我不需要移动所有的SDK而不是什么)。一切似乎都没问题,除了我得到错误“gcc:错误试图执行'cc1plus':没有这样的文件或目录”所以我在gcc 4.3上安装了g ++ 4.3。一旦我这样做,我现在遇到了大量的错误。被发送垃圾邮件的主要是......

错误:带有C链接的模板 错误:具有C链接专业化的模板

这些是来自SDK的文件中的垃圾邮件,成千上万的人用来编译,所以我知道它不是'悬空的外部',但我假设我错过了一个包或什么的。在Ubuntu中,安装build-essential修复了这些问题,但我对Cygwin感到茫然。任何帮助将不胜感激。

修改

以下是它喷出的确切错误的密度http://www.ampaste.net/m3d0a864f

来自Sourcehook.h的第一个是因为 linux 显然没有在Cygwin中定义,但是来自'hl2sdk'的其余部分让我感到茫然。

2 个答案:

答案 0 :(得分:0)

我知道你说没有悬空的 extern“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 与系统文件中的内容冲突。)

答案 1 :(得分:0)

@Mr。 Ree:“C ++源文件通常使用后缀.C,.cc,。cpp,.CPP,.c ++,。cc或.cxx; C ++头文件经常使用.hh,.hpp ,. H,或(对于共享模板代码).tcc;和预处理的C ++文件使用后缀.ii。 GCC识别具有这些名称的文件并将它们编译为C ++程序,即使您以相同的方式调用编译器至于编译C程序(通常使用名称为gcc)。“ GCC代表GNU Compiler Collection已经有一段时间了。 http://linux.die.net/man/1/gcc