我正在开发嵌入式Linux上的一些多媒体软件,并且使用了我曾经发生过的开源库。该库来自供应商,并预先安装在硬件上。我可以确认GNU安装过程是通过autogen/make
来构建/链接/安装这个库的,但是,用于创建我自己的程序的头文件都指定了大写字母的常见数据类型。在C.所以我看到名为Int
和Char
的数据类型。具有奇怪大写数据类型的代码块在extern C
块内,并且C ++不接受Int
作为数据类型!
所以当我使用这些库时,我遇到了编译问题。 autogen生成的makefile
似乎从环境中获取了它的标志,我不想在每次需要编译程序时重新编译库。
有没有什么方法可以编译我自己的代码(只是用C编写)而不必修改这些专门为这个硬件制作的库?
CLARITY EDIT:我的任务是编译一个小的C程序,它依赖于预先安装了错误数据类型的头文件。我不想编辑或重新编译这些特定于硬件的头文件。
答案 0 :(得分:0)
您可能没有执行import / include部分,因此编译器会理解新类型。您不必修改库,但可能必须更改包含它的方式。 extern C
不够,因为它只是链接器的提示。如果正确告知声明,C ++可以接受Int
或Char
作为数据类型。好吧,它们不是真正的类型,但很可能是typedef结构,甚至更可能是通过预处理器宏处理它们。我愿意打赌他们已经使用了#define
,因此Int
被转换为实际的typedef语句。
你有这个库附带的示例代码吗?你可以发布库中的任何标题吗?
[编辑]
Engine.h
的第100行如下:
typedef Int Engine_Error;
对我说,你不能包含适当的标题。您还没有包含从编译中获得的错误,它是否为Int
指出了未知标识符,或者是否找不到Engine_Error
。如果是前者,那么您不包括Engine.h
,如果是后者,则您不包含包含Engine_Error
定义的任何标头。