在Windows上编译Linux OpenGL应用程序?

时间:2017-10-20 16:18:57

标签: c++ opengl g++ mingw cross-compiling

我制作了一个OpenGL应用程序,我可以在Linux上编译好。它使用静态.a库。现在我尝试使用MinGW(和.lib库)和g ++进行编译,但是当我尝试执行它时,生成的main.exe会显示此错误:https://i.imgur.com/dpidmsw.png

g++.exe -std=c++11 -Wall -o main.exe Main.cpp FastNoise.cpp shader.cpp texture.cpp glew32.lib glfw3.dll -lglu32 -lopengl32

将cmake与CMakeGUI一起使用来创建Visual Studio项目时,它可以正常工作:

cmake_minimum_required(VERSION 3.5)
add_definitions(-DGLEW_STATIC)
set (CMAKE_CXX_STANDARD 11)
add_executable(main Main.cpp texture.cpp shader.cpp FastNoise.cpp)
find_package(OpenGL REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS} )
IF (WIN32)
  target_link_libraries(main ${CMAKE_CURRENT_SOURCE_DIR}/GLEW_1130.lib ${CMAKE_CURRENT_SOURCE_DIR}/glfw3.lib ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${X11_LIBRARIES})
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/vertex.glsl ${CMAKE_CURRENT_BINARY_DIR}/Debug/vertex.glsl COPYONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fragment.glsl ${CMAKE_CURRENT_BINARY_DIR}/Debug/fragment.glsl COPYONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/dirt.bmp ${CMAKE_CURRENT_BINARY_DIR}/Debug/dirt.bmp COPYONLY)
ELSE()
  include_directories( ${X11_INCLUDE_DIRS} )
  find_package(X11 REQUIRED)
  target_link_libraries(main ${CMAKE_CURRENT_SOURCE_DIR}/libGLEW.a ${CMAKE_CURRENT_SOURCE_DIR}/libglfw3.a ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${X11_LIBRARIES} X11 Xxf86vm pthread dl Xrandr Xinerama Xcursor)
ENDIF()

1 个答案:

答案 0 :(得分:0)

仅仅因为你有静态库并不意味着它们与系统无关。您拥有的静态库都是为Linux目标构建的。他们希望使用与Windows不同的调用约定(即调用函数的方式)与Linux操作系统函数进行对话。基本上你是想在这里通过一个圆孔推一个方钉。它没有那种方式。

要为Windows构建,您还需要为Windows移植和构建的所有先决条件。幸运的是,你提到的所有库都有Windows端口,所以这不是问题。

  

我通过添加这些praeprocessor定义来修复它:

你什么都没做。你只是谎称​​某些(编译器,你的程序源代码等)关于它构建的工具链以及它所构建的目标。

如果您开始重新定义系统级预处理器定义,那么您正在做一些非常非常错误的事情。

这是你应该做的(好吧,我推荐的):转到http://www.msys2.org/并抓住MSys2安装程序。安装它,启动MinGW ...环境(有32位和64位环境)。 MSys2使用Arch Linux发行版的 Pacman 包管理器。使用它来安装工具链(make,binutils,gcc) - 确保安装正确的变体,包数据库包含msys,mingw32和mingw64的包 - 以及您需要的所有开发库。有GLEW,GLFW3等包装。

接下来安装 CMake 。我强烈建议使用MSys2软件包,但https://cmake.org/的独立安装程序 - 以这种方式安装的CMake知道如何使用MSys / MinGW ......等等。

然后为您的项目创建一个CMakeLists.txt并使用它来创建构建环境。关于CMake的好处是,它是跨平台的,并且知道大量的构建系统和编译环境。如果你的项目结构合理而且你不做疯狂的东西(或者你做了疯狂的东西,并在它周围放置正确的套装,这样就不会发生横冲直撞)你会得到一些你可以毫不费力地建立的东西大多数目标环境。