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



我制作了一个OpenGL应用程序,可以在Linux上很好地编译。它使用静态。一个图书馆。现在,我尝试使用MinGW(和.lib库)和g++进行编译,但当我尝试执行它时,生成的main.exe显示以下错误:https://i.stack.imgur.com/gCOmi.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()

仅仅因为有静态库并不意味着这些库在任何方面都是独立于系统的。您拥有的静态库都是为Linux目标构建的。他们希望使用不同于Windows的调用约定(即函数的调用方式)与Linux操作系统函数进行对话。从本质上讲,你是想把一个方形的钉子从这里的圆孔里推出来。这样不行。

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

我通过添加以下预处理器定义来修复它:

您什么都没修复。你只是对一些(编译器、程序源代码等)谎报了它构建的工具链和构建的目标。

如果你开始重新定义系统级的预处理器定义,你就做了一件非常非常错误的事情。

以下是你应该做的(好吧,我建议你):前往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并使用它来创建构建环境

最新更新