gpt4 book ai didi

opengl - 在 Linux 上为 Windows 交叉编译 OpenGL/glew

转载 作者:行者123 更新时间:2023-12-02 07:20:59 26 4
gpt4 key购买 nike

我正在尝试交叉编译一个小型测试 opengl/glew 程序,但 undefined reference 导致链接器错误。

$ /usr/bin/i486-mingw32-g++ -I/usr/i486-mingw32/include -L/usr/i486-mingw32/lib/ -lglfw -lglew32 -lopengl32 main.cc
/tmp/cct8OpVh.o:main.cc:(.text+0x50): undefined reference to `glfwInit'
/tmp/cct8OpVh.o:main.cc:(.text+0xa6): undefined reference to `glfwOpenWindowHint'
...

相同的代码在 Linux 上编译时也可以工作:

$ g++ -I/usr/include -L/usr/lib/ -lglfw -lGLEW -lGL main.cc

引起我注意的一件事是,从交叉编译库导出的每个符号都有一个额外的下划线前缀:

$ nm /usr/lib/libglfw.a | grep glfwInit$
00000000 T glfwInit

$ /usr/i486-mingw32/bin/nm /usr/i486-mingw32/lib/libglfw.a | grep glfwInit$
00000000 T _glfwInit

这似乎是一件常见的事情,因为即使 libstdc++.a 也共享此属性,但为什么我的交叉编译器链接器会寻找非下划线符号?

使用以下包运行 arch(本地指 AUR):

community/mingw32-binutils 2.23.1-3
community/mingw32-gcc 4.7.2-1
local/mingw32-glew 1.9.0-1
local/mingw32-glfw 2.7.7-1
community/mingw32-pthreads 2.9.1-1
community/mingw32-runtime 3.20-4
community/mingw32-w32api 3.17-1

编辑

在使用 pkg-config 并观察 glfw 重新编译和测试自身之后,我想出了以下似乎有效的魔法,至少我正在编译:

 /usr/bin/i486-mingw32-g++ -I/usr/i486-mingw32/include -L/usr/i486-mingw32/lib -mwindows main.cc -lglew32 /usr/i486-mingw32/lib/libglfw.a /usr/i486-mingw32/lib/libopengl32.a -static-libgcc

但是有几个问题:

  • 使用 -l 链接和不使用 -l 链接有什么区别?
  • 为什么我需要将 -l 与 glew 一起使用而不能与 glfw 一起使用

最佳答案

我能够解决我的问题,如果有人遇到类似的情况,希望这对您有帮助。

  • 我的系统中有两个版本的glew32库,glew32.a和glew32.dll.a。
    • glew32.a 不允许使用 --static,glew32.dll.a 允许。

成功编译的两个命令,仅我运行的第一个是:

/usr/bin/i486-mingw32-g++ -I/usr/i486-mingw32/include -L/usr/i486-mingw32/lib main.cc -lglew32.dll -lglfw -lopengl32 --static
/usr/bin/i486-mingw32-g++ -I/usr/i486-mingw32/include -L/usr/i486-mingw32/lib main.cc -lglew32 -lglfw -lopengl32

看看我以前的编译尝试,问题是库的顺序错误,并且 main.cc 在库之后。

关于opengl - 在 Linux 上为 Windows 交叉编译 OpenGL/glew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com