C 为什么读取后不调用fstab64?这会是个问题吗?
我想创建一个新的动态库,而不是另一个源代码丢失的库。我创建了一个带有导出函数的库,但程序没有加载它。结论Strace几乎是一样的,唯一的区别是在调用read之后加载我的库时,没有调用fstat64 斯特拉斯原始图书馆: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
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