动态链接GLFW和GLFW3 /分发OpenGL

时间:2014-09-15 16:51:22

标签: c++ gcc ld glfw glew

我一直试图动态地将GLEW和GLFW链接到某些tutorial code并且遇到问题。

首先,设计问题:正确的方法是什么?如果我想在二进制和源代码中使用GLFW3分发OpenGL应用程序,那么它应该是什么以及如何使用它?我想一个静态链接的GLFW和GLEW。但是GLU,GL和其他未来的库(glm,SOIL等)呢?混合和匹配静态和动态在某些时候必须变得不安全,对吗?

第二,我目前面临的具体问题。我已经尝试了我在这个简单的Makefile上可以想到的每个变体,但是每次都有一些未定义的符号或完全丢失的库。

BINS           = $(basename $(wildcard *.cpp))
CPP            = g++
CFLAGS        += -fdiagnostics-color -Wall -Wextra -std=c++11 -static-libstdc++
STATIC_DIRS   := -I./static -L./static
STATIC_LFLAGS := -Wl,--verbose -Wl,-Bstatic -lGLEW -lglfw
DYNA_LFLAGS   := -Wl,-Bdynamic -lrt -lm -lXrandr -lXrender -lXi -lGLU -lm -lGL -lm -lpthread -ldl -ldrm -lXdamage -lXfixes -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-randr -lxcb-xfixes -lxcb-render -lxcb-shape -lxcb-sync -lxshmfence -lXxf86vm -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp 

all:
    $(MAKE) $(BINS)

%: %.cpp
    $(CPP) $(CFLAGS) $(STATIC_DIRS) $(STATIC_LFLAGS) $(DYNA_LFLAGS) -o $@ $@.cpp

.PHONY: clean

clean:
    rm -f $(BINS) *~

这会对调用的每个GLEW和GLFW函数以及glClear()等GL函数产生未定义的引用。 $(DYNA_LFLAGS)变量是pkg-config所说的GLEW和GLFW3需要静态链接的,尽管我不确定为什么标准的OpenGL函数如果那些LFLAGS实际工作就无法被调用。最后,如果我删除了-static-libstdc++我从ld收到关于libgcc_s.a的错误(虽然-static-libgcc似乎也解决了这个问题?)。

目前的目录层次结构是

/source.cpp
/Makefile
/static/
/static/libGLEW.a
/static/libglfw3.a
/static/GL/
/static/GL/glew.h
/static/GLFW/
/static/GLFW/glfw3.h

这意味着make可以找到库和包含。确实,ld通知:

attempt to open ./static/libGLEW.a succeeded
attempt to open ./static/libglfw.a succeeded

那么问题是什么?而且,我是否正确地接近这个?

0 个答案:

没有答案