C 错误:杂散'#&引用;程序内(SWIG)

C 错误:杂散'#&引用;程序内(SWIG),c,swig,C,Swig,我正在使用RHEL6并尝试使用SWIG编译一些代码 SWIG文件名为mySwig.i,看起来像 %module base_module %{ #include "base.h" %} %include "base.h" i文件保存在名为foo的文件夹中。foo文件夹还有其他.h、.c和.cxx文件 我使用的命令是 gcc -fpic -c foo/* 输出为: foo/mySwig.i:1 error: expected identifier

我正在使用RHEL6并尝试使用SWIG编译一些代码

SWIG文件名为mySwig.i,看起来像

   %module base_module
   %{
     #include "base.h"
   %}
   %include "base.h"
i文件保存在名为foo的文件夹中。foo文件夹还有其他.h、.c和.cxx文件

我使用的命令是

    gcc -fpic -c foo/*
输出为:

    foo/mySwig.i:1 error: expected identifier or '(' before '%' token
    foo/mySwig.i:3 error: stray '#' in program
    foo/mySwig.i:5 error: expected identifier or '(' before '%' token

有人知道如何解决这些错误吗?

gcc-fpic-cfoo/*
将匹配目录foo/中的所有文件。您最可能只想匹配C文件。如果你真的愿意,你可以用
gcc-fpic-cfoo/*.c
做什么


我个人建议使用类似Cmake或AutoToo工具之类的东西,甚至只是一个MaFo文件来构建你的项目,而不是直接调用CC。< /P>你不能编译SWIG规范文件作为C++源文件!您需要首先使用特殊程序将其转换为源文件。在另一个注释中,你标记了这个问题C++,但是你使用<代码> GCC < /C>编译而不是例如<代码> G++< /C>。嗨,约阿希姆,谢谢你的回复。我相信.I文件是由SWIG编译成.cxx文件的。如果我从目录中删除.I文件,我会收到关于“链接器输入文件未使用,因为链接未完成”的其他错误。我将如何转换它?如果SWIG生成了一个.cxx文件,而其余的代码是.c文件,那么我应该使用哪种编译器,gcc还是g++(对不起,我是Linux上编译的新手)您好,谢谢您的回复。当我尝试这样做时,我得到了关于“链接器输入文件未使用,因为链接未完成”的其他错误。我不熟悉使用CMake/Autotools,所以我一直在寻找一种快速而肮脏的方法来正确编译代码。@user973479我的建议:忘记SWIG,从一本关于Linux上C的书或教程开始。例如,这似乎是一个很好的建议。不幸的是,这不是一个选择。SWIG对于为项目生成JNI至关重要。在Windows上使用SWIGWin可以很好地编译该文件,因此我认为这可能是一个简单的修复方法,可以消除该错误消息,因为其他一切都可以很好地编译。@user973479您的问题与SWIG完全无关。您需要了解如何编译和链接内容。可能您想做
gcc-fPIC foo/*.c-shared-o libfoo.so-lwhateveryoulink反对
,但了解全局并构建系统是非常值得的。