Gdb 禁用位置独立代码&;Linux上带Qt5的ASLR?

Gdb 禁用位置独立代码&;Linux上带Qt5的ASLR?,gdb,debian,qt5,x86-64,aslr,Gdb,Debian,Qt5,X86 64,Aslr,在Linux/Sid/x86-64上,对于使用Qt5(Debian打包的5.12.5)的GPLv3+项目,我更喜欢禁用它以简化调试(并促进)。FWW,这个项目在运行时在运行时生成C++代码,编译成一个,并正在获得所得到的插件。因此,使用gdb绝对有用 因此,使用Debian的g++9.3.0编译的RefPerSys,在make clean和make fullclean之后,使用make RPS\u BUILD\u CODGENFLAGS=(或编辑以取消定义)我得到以下可重现的编译器错误: cca

在Linux/Sid/x86-64上,对于使用Qt5(Debian打包的5.12.5)的GPLv3+项目,我更喜欢禁用它以简化调试(并促进)。FWW,这个项目在运行时在运行时生成C++代码,编译成一个,并正在获得所得到的插件。因此,使用
gdb
绝对有用

因此,使用Debian的
g++
9.3.0编译的RefPerSys,在
make clean
make fullclean
之后,使用
make RPS\u BUILD\u CODGENFLAGS=
(或编辑以取消定义)我得到以下可重现的编译器错误:

ccache g++ -std=gnu++17 -Og -g3  -Wall -Wextra -I .  -I /usr/local/include  -I /usr/include -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/local/include -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -DRPS_GITID=\"dae216918be51c0c025d8d57369d186db08e4923+\"   -c -c -o refpersys.hh.gch-tmp refpersys.hh
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qnamespace.h:43,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs.h:48,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:46,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QObject:1,
                 from refpersys.hh:100:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1187:4: error: #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)."
 1187 | #  error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\
      |    ^~~~~
正如错误消息所说,它与Debian People使用
-reduce-relocations
构建的Qt5有关。从那时起,您必须使用独立于位置的代码构建代码

这只是从源代码重新编译Qt5的问题,还是比这更微妙? 更广泛地说:

如何在Debian/Sid上编译的Qt5代码上使用GDB监视点? 当然我想要硬件观察点。通常在
gdb
下打印一些指针,例如
0x7fafb071b8
然后
watch*(int*)0x7fafb071b8
内部
gdb

与上述问题相关的动机。从源代码编译Qt并不是那么简单

我刚刚添加了一个
--no aslr
程序选项(使用来自的提示以编程方式禁用aslr)。该选项有时在当前进程上运行。从一次跑步到下一次跑步,我观察的地图大不相同

注:要复制错误,在成功执行
make
后,不设置
RPS\u BUILD\u CODGENFLAGS=
运行两次
/refpersys--no aslr-dGUI--display=object
。这两个
\u refpersys*Pmap*.tmp
文件(输出
Pmap
)大不相同。我希望他们是相似的。对于2020年5月的编码细节,请参阅<代码> > RPSYDABABLE AASLR < /C>变量> C++源代码、文件,以及大部分……/P> 注意:上安装的7.1出现相同错误。 因此,在中,我们切换到。

使用
从源代码构建Qt-无减少重新定位将生成一个库,该库可以与非PIC对象文件链接,至少对于一个小的测试用例来说。从源代码构建Qt时,使用
-no-reduce-relocations
将生成一个库,该库可以与非PIC对象文件链接,至少对于一个小的测试用例是如此。