1. 程式人生 > 實用技巧 >FlightGear 從輸出所省略的額外重定址溢位

FlightGear 從輸出所省略的額外重定址溢位

2020-12-27

在龍芯Fedora28上編譯 FlightGear 2019.1.1 時遇到 從輸出所省略的額外重定址溢位 錯誤,錯誤資訊如下:

[ 98%] Linking CXX executable fgfs
CMakeFiles/fgfs.dir/__/Scripting/NasalCanvas.cxx.o:在函式‘to_nasal_helper(Context*, osg::BoundingBoxImpl<osg::Vec3f> const&)’中:
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:90:(.text+0x238):  截斷重定址至相符: R_MIPS_CALL16 針對 _Unwind_Resume@@GCC_3.0
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:84:(.text+0x28c):  截斷重定址至相符: R_MIPS_CALL16 針對 _Unwind_Resume@@GCC_3.0
CMakeFiles/fgfs.dir/__/Scripting/NasalCanvas.cxx.o:在函式‘f_createCanvas(nasal::CallContext const&)’中:
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x4e4):  截斷重定址至相符: R_MIPS_CALL16 針對 std::allocator<char>::allocator()@@GLIBCXX_3.4
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x508):  截斷重定址至相符: R_MIPS_CALL16 針對 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x580):  截斷重定址至相符: R_MIPS_CALL16 針對 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x594):  截斷重定址至相符: R_MIPS_CALL16 針對 std::allocator<char>::~allocator()@@GLIBCXX_3.4
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x5fc):  截斷重定址至相符: R_MIPS_CALL16 針對 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x61c):  截斷重定址至相符: R_MIPS_CALL16 針對 std::allocator<char>::~allocator()@@GLIBCXX_3.4
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:127:(.text+0x634):  截斷重定址至相符: R_MIPS_CALL16 針對 _Unwind_Resume@@GCC_3.0
CMakeFiles/fgfs.dir/__/Scripting/NasalCanvas.cxx.o:在函式‘f_createWindow(nasal::CallContext const&)’中:
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:137:(.text+0x6d0):  截斷重定址至相符: R_MIPS_CALL16 針對 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()@@GLIBCXX_3.4.21
/home/loongson/下載/flightgear/flightgear-2019.1.1/src/Scripting/NasalCanvas.cxx:137:(.text+0x7a4):  從輸出所省略的額外重定址溢位
collect2: 錯誤:ld 返回 1
make[2]: *** [src/Main/CMakeFiles/fgfs.dir/build.make:7427:src/Main/fgfs] 錯誤 1
make[1]: *** [CMakeFiles/Makefile2:2133:src/Main/CMakeFiles/fgfs.dir/all] 錯誤 2
make: *** [Makefile:163:all] 錯誤 2

大佬指點後得知需要新增cxxflag -mxgot 。最終解決如下:

CMakeList.txt 中新增一行(我新增在了第55行):

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mxgot")

重新 cmake && make 通過。