Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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
C 为什么读取后不调用fstab64?这会是个问题吗?_C_Linux_Strace_Lib - Fatal编程技术网

C 为什么读取后不调用fstab64?这会是个问题吗?

C 为什么读取后不调用fstab64?这会是个问题吗?,c,linux,strace,lib,C,Linux,Strace,Lib,我想创建一个新的动态库,而不是另一个源代码丢失的库。我创建了一个带有导出函数的库,但程序没有加载它。结论Strace几乎是一样的,唯一的区别是在调用read之后加载我的库时,没有调用fstat64 斯特拉斯原始图书馆: open("/usr/local/lpr/li2/libSA.so", O_RDONLY) = 12 read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\3409\0"..., 1024) = 1024 fs

我想创建一个新的动态库,而不是另一个源代码丢失的库。我创建了一个带有导出函数的库,但程序没有加载它。结论Strace几乎是一样的,唯一的区别是在调用read之后加载我的库时,没有调用fstat64

斯特拉斯原始图书馆:

open("/usr/local/lpr/li2/libSA.so", O_RDONLY) = 12
read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\3409\0"...,     1024) = 1024
fstat64(12, {st_mode=S_IFREG|0644, st_size=46166, ...}) = 0
old_mmap(NULL, 40256, PROT_READ|PROT_EXEC, MAP_PRIVATE, 12, 0) = 0x40150000
mprotect(0x40159000, 3392, PROT_NONE)   = 0
old_mmap(0x40159000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 12, 0x8000) = 0x40159000
close(12)                               = 0
我的图书馆:

open("/usr/local/lpr/li2/libSA.so", O_RDONLY) = 12
read(12, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\210\0\0"...,     1024) = 1024
close(12)                               = 0
time(NULL)

您正在尝试将64位共享对象加载到32位进程中

由以下两个读取调用执行的读取操作:

不同。请注意,第一次读取的第五个字节是1。这就是32位共享对象的成功加载

在不成功的尝试中,第五个字节是2,这意味着共享对象是一个64位的共享对象


您可能需要编译并使用-m32选项进行链接。

您是使用dlopen链接库还是使用dlopen加载库?使用“dlopen”加载,然后dlopen会失败还是成功?如果失败,有什么错误?
read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\3409\0"...,     1024) = 1024
read(12, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\210\0\0"...,     1024) = 1024