gpt4 book ai didi

c++ - Centos 7 带有自定义构建的 GLFW binary/usr/bin/ld :/usr/local/lib/libglfw3. a(init.c.o): `.text' 部分中无法识别的重定位 (0x2a)

转载 作者:太空宇宙 更新时间:2023-11-04 10:18:32 31 4
gpt4 key购买 nike

请注意,我正在使用 Centos 7 和 source scl_soruce enable devtoolset-6 和 rehl elrepo Nvidia 驱动程序(禁用 noveau)。通过 devtoolset-6 的 gcc 和 g++ 版本显然是 GNU 6.2.1

注意我也使用 libc 版本 ldd (GNU libc) 2.17

我正在关注 this tutorial on opengl但现在我被困住了。我从 glfw's 下载源代码网站,并按照教程进行构建(没有发现任何错误)。我用提供的源代码和来自 repo 的主构建尝试了这个,结果相同。

我将源文件提取到主目录中,在里面运行 cmake .,然后运行 ​​make 然后运行 ​​sudo make install 并且没有发生错误.

注意我还使用了教程中描述的 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;
}

还有我的 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

最佳答案

哇,这与 Centos 7 的一个令人沮丧的问题有关...... Centos 7 有一个如此旧的 g++ 版本,我被迫使用 dev-toolset-6 以获得现代版本的 g++ 即一个支持c++14的。这与当前项目无关(我显然正在使用 c++11),但关于 Clion 的事情是默认情况下它使用/usr/bin/中的 g++/gcc/gmake 版本,即 不是 g++ 6.2.1 版本所在的位置。

我已经解决了使用 C++14 的项目的这个问题,进入所需项目的设置,然后将以下行粘贴到构建、执行、部署下的 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++ 的正确位置。当然,我可以做一些符号链接(symbolic link)来修复它,但我之前曾假设我在终端中找到正确版本(修改 .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 网络系统有问题)

关于c++ - Centos 7 带有自定义构建的 GLFW binary/usr/bin/ld :/usr/local/lib/libglfw3. a(init.c.o): `.text' 部分中无法识别的重定位 (0x2a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44978053/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com