注意我正在使用带有source scl_soruce enable devtoolset-6
的Centos 7和带有禁用noveau的rehl elrepo Nvidia驱动程序。通过devtoolset-6的gcc和g ++版本显然是GNU 6.2.1
注意我也使用libc版本ldd (GNU libc) 2.17
我关注this tutorial on opengl,但现在我被困住了。我从glfw's网站下载了源代码,并按照教程构建(并且没有看到任何错误)。我尝试使用提供的源代码和来自repo的master构建,但结果相同。
我将源文件解压缩到主目录,在里面运行cmake .
,然后运行make
然后运行sudo make install
并且没有发生错误。
注意我还使用了opengl 3.3,
中使用的高兴实用工具我的文件结构如下:
cmake-build-debug
...
include
glad
KHR
CMakeLists.txt
glad.c
main.cpp
这是我的源代码:
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
std::cout << "Hello, World!" << std::endl;
return 0;
}
我的CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(opengltest)
set(CMAKE_CXX_STANDARD 11)
include_directories("include/")
set(SOURCE_FILES main.cpp glad.c)
add_executable(opengltest ${SOURCE_FILES})
target_link_libraries(opengltest -L/usr/local/lib -lglfw3 -pthread -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11 -ldl)
这是我得到的确切输出:
/home/centos/IDE/bin/cmake/bin/cmake --build /home/centos/IDEProjects/opengltest/cmake-build-debug --target opengltest -- -j 4
Scanning dependencies of target opengltest
gmake[3]: Warning: File `../include/KHR/khrplatform.h' has modification time 17724 s in the future
[ 66%] Building CXX object CMakeFiles/opengltest.dir/main.cpp.o
[ 66%] Building C object CMakeFiles/opengltest.dir/glad.c.o
[100%] Linking CXX executable opengltest
/usr/bin/ld: /usr/local/lib/libglfw3.a(init.c.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
gmake[3]: *** [opengltest] Error 1
gmake[2]: *** [CMakeFiles/opengltest.dir/all] Error 2
gmake[1]: *** [CMakeFiles/opengltest.dir/rule] Error 2
gmake: *** [opengltest] Error 2
答案 0 :(得分:1)
我已经使用C ++ 14的项目解决了这个问题,进入你想要的项目的设置,并将以下行粘贴到Build,Execution,Deployment下面的CMake选项中:
-D CMAKE_CXX_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/g++ -D CMAKE_C_COMPILER=/opt/rh/devtoolset-6/root/usr/bin/gcc
这是g ++的正确位置。当然我可以做一些符号链接来解决它,但我以前曾认为我在终端中找到正确版本的解决方案(修改.bashrc)也适用于clion。
当我一时兴起测试c ++ 14功能时,显然这不起作用。
现在为什么这是一个问题?我使用了两个非常不同版本的g ++ / gcc,我使用g ++ / gcc 6.2.1来编译我的GLFW,并使用4.7或其他东西来编译我的实际程序。这就是为什么我得到这个奇怪的错误。
请注意,这只能修复奇怪的.txt问题,我的cmake文件也不正确,因为我忘了定位Xcursor。新的cmake文件现在看起来像这样:
cmake_minimum_required(VERSION 3.7)
project(opengltest)
set(CMAKE_CXX_STANDARD 11)
include_directories("include/")
set(SOURCE_FILES main.cpp glad.c)
add_executable(opengltest ${SOURCE_FILES})
target_link_libraries(opengltest -L/usr/local/lib -lglfw3 -pthread -lGLU -lGL -lrt -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -ldl)
我现在没有错误(我仍然用时钟偏差发出奇怪的警告,我只是假设GLAD网络系统有问题)