Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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 加载程序时出现符号查找错误。符号在静态库中定义,可以使用nm查看_Linux_Runtime_Loader_Symbols - Fatal编程技术网

Linux 加载程序时出现符号查找错误。符号在静态库中定义,可以使用nm查看

Linux 加载程序时出现符号查找错误。符号在静态库中定义,可以使用nm查看,linux,runtime,loader,symbols,Linux,Runtime,Loader,Symbols,我在运行程序时看到以下错误: /usr/bin/getinfo: symbol lookup error: /usr/pkl/libinfo.so: undefined symbol: GetList 此函数“GetList”在静态库liblist.a中定义,该库已链接到可执行文件/usr/bin/getinfo,并使用gcc编译。当我运行'nm'命令时,我可以看到可执行文件getinfo中定义了符号。以下是nm命令输出: root@pkl $ nm /usr/bin/getinfo | gr

我在运行程序时看到以下错误:

/usr/bin/getinfo: symbol lookup error: /usr/pkl/libinfo.so: undefined symbol: GetList
此函数“
GetList
”在静态库
liblist.a
中定义,该库已链接到可执行文件
/usr/bin/getinfo
,并使用gcc编译。当我运行'nm'命令时,我可以看到可执行文件getinfo中定义了符号。以下是nm命令输出:

root@pkl $ nm /usr/bin/getinfo | grep GetList
080a3d89 T GetList
我还使用readelf命令进行了检查,以下是输出:

root@pkl $ readelf -a /usr/bin/getinfo | grep GetList
 1080: 080a3d89 1777 FUNC   GLOBAL DEFAULT   15 GetList
libinfo.so共享库调用函数GetList,该函数在liblist.a静态库中定义。
libinfo.so
liblist.a
都列为可执行文件的依赖项
/usr/bin/getinfo
liblist.a
不是作为依赖项添加到
libinfo.so

我还做了
objdump-S/usr/bin/getinfo | grep GetList
,可以看到这个函数的汇编代码。但是,在运行程序时,它会因符号查找错误而崩溃。这不是共享库问题,我无法解决它。请提供帮助。

您正在动态加载共享对象
/usr/pkl/libinfo。因此
可能是通过使用
dlopen(3)
或类似函数来实现的。了解您是如何编译
getinfo
(确切的链接命令)以及如何加载共享库(如果它正在调用
dlopen(3)
,或在程序启动时自动加载)链接过程后没有可用的静态库信息是很有意思的(由于静态库的链接只包括从中提取
.o
文件并将其正常链接到可执行文件),因此说
GetList
来自静态库或
*.o
对象在这里不感兴趣

显示链接
getinfo
可执行文件的确切命令序列,如果通过调用
dlopen(3)加载
libinfo.so
<代码> >调用中的一些上下文也应该是有意思的。此外,如果代码< > GETLIST/C++ >是C或C++函数,应该很好知道,因为C++符号是由编译器来命名的,以应付参数列表类型匹配。也许您在输出中看到了C样式函数,输出到<代码> NM。GetList
函数

顺便问一下,链接完成后,关于某个静态库的依赖信息意味着什么。我假设
GetList
函数包含在可执行文件中,正如您在
nm(1)
输出中所显示的那样。因此,在动态链接时,
libinfo.So
共享对象应该可以使用它(这取决于链接过程中链接器的一些选项——这就是要求使用确切链接命令的原因)如果可能,了解
libinfo.so
模块的确切链接命令也很重要

编辑您的问题并添加缺少的信息,以便我们可以帮助您