Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用自定义python从源代码构建gdb 10.1_Linux_Makefile_Gdb_Gdb Python - Fatal编程技术网

Linux 使用自定义python从源代码构建gdb 10.1

Linux 使用自定义python从源代码构建gdb 10.1,linux,makefile,gdb,gdb-python,Linux,Makefile,Gdb,Gdb Python,我正试图从源代码构建最新的GDB10.1 [我想这样做的原因是,我正在尝试调试一个链接到Python 2.7.18自定义版本的程序,我的系统gdb链接到My/lib64目录中的Python 2.7.5版本,不适用于较新版本] 在阅读了自述文件后,我使用以下配置: ../gdb-10.1/configure --with-python=<path to my 2.7.18 installation> --prefix=<path to where I want the new g

我正试图从源代码构建最新的GDB10.1

[我想这样做的原因是,我正在尝试调试一个链接到Python 2.7.18自定义版本的程序,我的系统gdb链接到My/lib64目录中的Python 2.7.5版本,不适用于较新版本]

在阅读了自述文件后,我使用以下配置:

../gdb-10.1/configure --with-python=<path to my 2.7.18 installation> --prefix=<path to where I want the new gdb to go>
在检查configure步骤的输出和Makefile本身时,我找不到任何关于我在configure时指定的Python安装的参考(我还将它放在LD_LIBRARY_路径的开头,以确保编译器和链接器在构建时可以找到它)


我在这里错过了什么?

我最近做了类似的事情,也很挣扎,尽管是因为不同的问题

我怀疑您的构建问题可能与您对LD_LIBRARY_PATH的使用有关,或者与来自您的环境的其他内容(PATH、CFLAGS、LDFLAGS等)有关。您不应该在构建过程中设置这些

以下是我所做工作的概要:

(1) 对于gdb的构建,我使用了如下方法:

导出路径=/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
未设置LD_库路径
../gdb-10.1/configure--prefix=/opt/gdb-10.1--with python=/opt/conda-py2.7.18
make&>make.log
make-install&>make-install.log
设置路径和取消设置LD_LIBRARY_路径是为了净化环境。这确保了构建只能使用
--with python
来定位python(它本身位于python前缀下的
bin/python
)。(也未设置CFLAGS和LDFLAGS,也未设置任何PYTHON变量。)

我保留了make阶段的输出。如果您在那里查看,您应该会看到选择了
with python
选项

这一切都很好

(2) 要调用调试器(并在/opt下使用我的python),我需要一个额外的步骤:设置LD_LIBRARY_PATH,以便使用pythons libpython:

export LD_LIBRARY_PATH=/opt/conda-py2.7.18/lib
/opt/gdb-10.1/bin/gdb
(gdb)python导入系统;打印(系统版本)
2.7.18 |蟒蛇公司。

最好能找到一种方法来避免设置LD_LIBRARY_PATH的这种需要;这可能需要静态链接libpython,或者引入一些构建标志,例如使用rpath。

如果您使用
grep PYTHON\u CPPFLAGS/path/to/your/build/directory/gdb/config.log
(或者
config.status
),那么
-I
选项是否引用包含
PYTHON.h
的目录,我在makefile中也找不到任何PYTHON_CPPFLAGS。config.log和config.status中都有几个地方记录了我的“-with python”字符串,但没有任何地方显示根据它采取了任何操作。OK,在
build/gdb
目录中的
config.log
中查找以
检查是否使用python
检查python代码的编译器标志开始的行,并查看测试程序是否成功。Hm。。gdb/config.log文件中的所有内容都与我期望的一样。Python测试运行后,返回结果为“result:yes”,并且在gdb/config.log文件和gdb/config.status文件中正确定义了Python_CPPFLAGS(在我之前的回复中,我犯了只查看主构建目录而不查看gdb子目录的错误)。然后,Python.h的正确路径包含在gdb/Makefile中的内部标志定义中。但是构建仍然像最初描述的那样失败。我还可以看到,在gdb/config.h中,带有_PYTHON_LIBDIR的宏被正确设置为包含我的libpython2.7.so.1.0文件的目录;当我设置LD_LIBRARY_PATH时,整个问题就暴露了出来,因为在此之前,我自己的应用程序找不到必要的Python构建。一旦我设置了它,我发现我的应用程序可以正常工作,但调试器不再工作了!好的,我再次尝试使用最小路径构建,一个空的LD_LIBRARY_路径,并确保没有设置PYTHON变量(例如PYTHONPATH/PYTHONHOME)或标志变量。我还在一台完全不同的机器上使用相同的Python构建进行了尝试。同样的结果。最后,为了好玩,我又做了同样的事情,在/usr/bin/python中将--with python设置为系统python安装。效果很好!很明显,问题在于我自己的Python构建本身(尽管它可以很好地用于我尝试使用它进行的其他工作),或者它的路径的一些非常模糊的方面。当您构建自定义Python时,您是否添加了
--with pydebug
来进行调试构建?这可能会引入额外的调试符号(如_Py_RefTotal),因此可能是另一个原因。有趣的是,您应该说:上面关于我的自定义构建的所有报告都与使用--with pydebug编译的版本有关。我有另一个没有它的编译版本,所以我尝试使用这个。。。并且得到了一些类似但不同的错误,这一次涉及到PyUnicodeCS2_Decode和该系列中其他函数的未定义引用。现在,我还检查了我的自定义Python是否是使用UCS2编译的(“print sys.maxunicode”返回65535),因此我并不觉得更明智。出现这些缺少的符号,例如,
\u Py\u RefTotal
,是因为您使用
--使用pydebug
构建Python。我认为您应该尝试构建一个简单而干净的python,即尽量减少标志的数量,看看这是否解决了问题。目前,您有一些活动部件等。
python/py-arch.o: In function `gdbarch_to_arch_object(gdbarch*)':
.../build/gdb/../../../gdb-10.1/gdb/python/py-arch.c:86: undefined reference to `_Py_RefTotal'
python/py-arch.o: In function `gdbpy_ref_policy<_object>::decref(_object*)':
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_RefTotal'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_NegativeRefcount'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_Dealloc'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_RefTotal'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_RefTotal'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_RefTotal'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_NegativeRefcount'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_Dealloc'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_RefTotal'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_Dealloc'
.../build/gdb/../../../gdb-10.1/gdb/python/py-ref.h:36: undefined reference to `_Py_NegativeRefcount'