C++ Centos 7,带有自定义生成的GLFW二进制文件/usr/bin/ld:/usr/local/lib/libglfw3.a(init.c.o):在节“.text”中无法识别的重新定位(0x2a)

C++ Centos 7,带有自定义生成的GLFW二进制文件/usr/bin/ld:/usr/local/lib/libglfw3.a(init.c.o):在节“.text”中无法识别的重新定位(0x2a),c++,linux,opengl,cmake,linker,C++,Linux,Opengl,Cmake,Linker,注意:我正在使用Centos 7和源scl_soruce enable devtoolset-6,以及带有禁用noveau的rehl elrepo Nvidia驱动程序。通过devtoolset-6的gcc和g++版本显然是GNU6.2.1 注:我也使用libc版本ldd GNU libc 2.17 我一直在跟踪,但现在我被卡住了。我从网站下载了源代码,并按照教程进行构建,没有发现任何错误。我用提供的源代码和来自repo的主构建进行了尝试,结果相同 我将源文件解压缩到主目录,运行cmake。在内

注意:我正在使用Centos 7和源scl_soruce enable devtoolset-6,以及带有禁用noveau的rehl elrepo Nvidia驱动程序。通过devtoolset-6的gcc和g++版本显然是GNU6.2.1

注:我也使用libc版本ldd GNU libc 2.17

我一直在跟踪,但现在我被卡住了。我从网站下载了源代码,并按照教程进行构建,没有发现任何错误。我用提供的源代码和来自repo的主构建进行了尝试,结果相同

我将源文件解压缩到主目录,运行cmake。在内部,然后运行make,然后运行sudomake安装,没有发生错误

注意,我还使用了教程中描述的glad实用程序,使用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;
}
下面是我得到的确切输出:

/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

哇,这与Centos 7的一个令人沮丧的问题有关。。。Centos 7有一个如此古老的g++版本,我被迫使用dev-toolset-6来获得一个支持c++14的现代版本的g++ie。这与我使用c++11的当前项目无关,但Clion的问题是,默认情况下,它使用的是在/usr/bin/中找到的g++/gcc/gmake版本,而不是g++6.2.1版本所在的位置

我已经修复了使用C++14的项目的此问题,进入所需项目的设置,并将以下行粘贴到CMake选项中的Build、Execution和Deployment下面:

-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++的正确位置。当然,我可以做一些符号链接来修复它,但我之前假设我在terminal Modification.bashrc中找到正确版本的解决方案也适用于clion

当我一时兴起测试c++14特性时,很明显这不起作用

为什么这是个问题?我使用了两个非常不同的g++/gcc版本,我使用g++/gcc6.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)

我现在没有任何错误,我仍然认为时钟偏移是个奇怪的警告,我只是假设Glady Web系统有问题,很好的调查。
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)