2012-09-14 141 views
2

我想在我创建的程序中使用GLEW,但是我的编译器不会编译它,而是会在此行上引发大量错误gcc -g -c glew.c -o glew.o。这是我的的Makefile基于GLEW的程序不能编译

MY_LIBS = 
glewex: glew.o main.o glew.h 
    g++ main.o glew.o glew.h -o glewex $(MY_LIBS) 
glew.o: glew.c 
    gcc -g -c glew.c -o glew.o 
main.o: main.cpp 
    g++ -g -c main.cpp -o main.o 

它简单地输出数百个错误的认为是这样的:

__glewActiveTexture重新声明时没有dllimport属性:以前进口忽略[-Wattributes]

回答

4

试试这个:

gcc -g -DGLEW_STATIC -c glew.c -o glew.o 

这应该防止DLL导入/导出装饰被添加到声明中。

+0

它停在我前面的错误,但现在我得到吨的错误,看起来像这样:未知的名称类型'PFNGLBUFFERREGIONENABLEDEXTPROC'警告:初始化从指针没有投射整数[默认启用] – imkendal

+0

实际上,而不是''D'搞砸'#define GLEW_STATIC'在'glew.h'中'#define __GLEW_H__'之后。 – genpfault

+0

另外,您需要继续使用'-DGLEW_STATIC'编译其他源文件。无论何时你的其他文件包含'#include'任何GLEW头文件,你都要确保每次都有相同的'#define'影响它。 – TheBuzzSaw

-2

您不想将库源文件添加到项目的编译器输入中。您应该将库添加到链接器输入列表中;静态(libglew.a)或动态(-lglew)。

I.e.无论是

gcc -o … -lglew 

gcc -o … libglew.a 

当链接GLEW静态必须添加-DGLEW_STATIC到编译器选项生成编译单元(.o文件)

+0

恰恰相反。你想把源文件添加到你的项目中。使用外部库会使构建复杂化,并将构建永久绑定到库的特定版本/体系结构/发行版/编译器。由于GLEW有一个友好的许可证,它是100%值得它只是编译它。 – TheBuzzSaw

+0

@ TheBuzzSaw:没有。如果您担心分发问题,请将该库作为外部依赖项整合到项目的构建过程中。只包括源文件会导致很多问题,因为您通常会有一个额外的预构建配置步骤,这将被完全绕过。作为一个例子,下载Blender源文件分发。所有第三方库都包含在内,但在项目构建过程中将其构建为真正的库。 “编译”意味着除了“静态链接”之外没有别的意思,但是应该在正确构建库的情况下完成。 – datenwolf

+0

如果你只包含裸源文件,那么最终会遇到很大的麻烦。迟早(实际上更早)。 – datenwolf