无法使用mingw32交叉编译Linux openGL程序。 Config.log错误:未定义的引用'_glEnable'
问题描述:
我正在尝试使用Mingw32交叉编译OpenGL程序,但遇到了路障。调用mingw32-configure后;编译由无法使用mingw32交叉编译Linux openGL程序。 Config.log错误:未定义的引用'_glEnable'
configure: error: lacking proper OpenGL support
打断我检查的config.log文件,发现如下条目:
configure:21709: checking GL/gl.h usability
configure:21726: ccache i686-pc-mingw32-g++ -c -O2 -g -pipe -Wall -,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -mms-bitfields conftest.cpp >&5
configure:21732: $? = 0
configure:21746: result: yes
configure:21750: checking GL/gl.h presence
configure:21765: ccache i686-pc-mingw32-g++ -E conftest.cpp
configure:21771: $? = 0
configure:21785: result: yes
configure:21813: checking for GL/gl.h
configure:21820: result: yes
configure:21834: checking for glEnable in -lGL
configure:21869: ccache i686-pc-mingw32-g++ -o conftest.exe -O2 -g -pipe - Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -mms- bitfields conftest.cpp -lGL >&5
/tmp/ccjGmlvX.o: In function 'main':../rpmbuild/SOURCES/poker3d-1.1.36/conftest.cpp:34: undefined reference to `_glEnable'
collect2: ld returned 1 exit status
configure:21875: $? = 1
configure: failed program was:
| /* confdefs.h. */
我有一个建议之后,从另一个加入LLVM软件光栅到我的系统本网站与此问题相关的线程,并且还实施了来自Mingw站点的将libopengl32.a复制到libGL.a的建议。到目前为止,没有任何改变每次编译尝试后得到的错误。
给我一些关于如何解决这个问题的建议。
答
autotools/autoconf对于交叉编译来说是非常糟糕的。生成的configure
脚本的工作方式是,对于许多测试,它会尝试编译并执行短测试片段程序。当然,由于缺乏指令集支持(针对不同的CPU进行编译)或针对完全不同的操作系统,整个“执行”部分对于交叉编译库来说将会失败。
至少在Linux中,可以使用“misc binfmt”内核支持来解决此问题,该支持允许为非本机可执行格式注册解释器。对于Windows目标,您可以使用Wine作为解释器,对于外部CPU,您可以使用QEmu,它不仅可以模拟整个机器,还可以将CPU仿真集中在单个进程/二进制文件上。当然你可以把它结合起来。
但是,这只是一个拐杖,说实话,你应该完全抛弃autoconf/autotools,只写Makefiles。今天,* nix-ish系统非常相似,所有这些编译的测试都没有任何意义。