2013-11-28 28 views
0

我刚刚开始在Windows上使用GLEW和MinGW。我可以成功编译程序(glew.hlibglew.a在MinGW中的适当位置),但执行我的程序会引发上述错误。 glew32.dll与可执行文件存在于同一个目录中,我发现并尝试了各种解决方案来解决我的问题。但是,我的问题似乎与其他人不同 - 错误消息是抱怨glewInit无法找到在可执行文件本身而不是glew32.dll。我还没有设法在Google上找到任何关于此的信息。运行时链接错误:程序入口点glewInit @ 0找不到

这里的错误:

enter image description here

正如你所看到的,这不是抱怨不能够找到一个DLL,的GLEW方法,但在程序文件本身。我觉得我错误地链接了可执行文件,但我在修复这类错误方面经验不足。

这里是我的Makefile:

EXEC  = test1.exe 
SRC_FILES = test1.cpp wavefront.cpp 

CXX = g++ 
CC = $(CXX) 

DEBUG_LEVEL  = -g 
EXTRA_CCFLAGS = -Wall 
CXXFLAGS  = $(DEBUG_LEVEL) $(EXTRA_CCFLAGS) 
CCFLAGS   = $(CXXFLAGS) 

CPPFLAGS  = -I. 

LDFLAGS   = -L"/cygdrive/c/MinGW/lib" 
LDLIBS   = -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lglu32 -lglew32 

O_FILES   = $(SRC_FILES:.cpp=.o) 

all: .FORCE 

.FORCE: compile link 

compile: 
    $(CXX) -c $(SRC_FILES) 

link: 
    $(CXX) $(O_FILES) -o $(EXEC) $(LDFLAGS) $(LDLIBS) 

clean: 
    $(RM) $(O_FILES) *.exe *.rpo 
+0

你是使用mingw自己编译glew32还是使用预编译的二进制文件? – greatwolf

+0

这是来自预先构建的二进制文件。我试图自己构建GLEW,但是我无法安装它所需的X11 dev依赖项。我想我已经设法通过编译'glew32s.lib'(静态库)来工作,但是 – Bojangles

+0

为什么在Windows平台上需要'X11'? oO – greatwolf

回答

1

错误在你的标题和你的图中是完全不同的。在标题中的第一个错误是装饰的DLL导出名称,第二个错误是__stdcall函数。无论出于何种原因,导入存根似乎试图从您的应用程序而不是DLL中解析函数地址。

也许你没有正确定义dllexport行为当你建立你的DLL或dllimport链接它时? GLEW使用预处理器定义:GLEW_BUILD用于此目的。

在任何情况下,使用静态链接glew库肯定会解决这个问题,但我不能说为什么它肯定发生。

       对glew32s链接,并添加-DGLEW_STATIC到你的Makefile。

+0

对不起,我们都应该看看标题正确显示的内容 – Bojangles

+0

@Bojangles:啊,这里有趣的东西虽然...... glewInit(...)通常是一个'__stdcall'函数,意思是装饰名称应该是_glewInit @ 0。我认为在编译DLL的时候调用约定和构建你的程序时调用惯例发生了变化。您可以尝试将'GLEWAPI'重新定义为'extern __declspec(dllimport)__stdcall'。但我想也许你在问题的标题中忘了下划线。 –

+0

谢谢你的帮助。我链接到从GLEW网站下载的Windows二进制文件中提供的'glew32s.lib',并且工作正常 – Bojangles

相关问题