从共享对象(.so)中访问共享内存(内存映射文件,使用固定地址0x60000000)时,我收到了段错误。
我们有很多应用程序毫无困难地访问此共享内存。 我的应用程序的不同之处在于我用它创建了一个小的.so而.so是调用mmap并访问共享内存的那个。
mmap()返回正常。我要求的地址已正确退回。但是一旦我尝试从这个.so中访问内存,就会出现故障。
我无法弄清楚.so的独特之处在于它会阻止它以这种方式访问共享内存。
有人有想法吗?
答案 0 :(得分:2)
一般情况下,从共享库访问mmap
内存绝不会与主可执行文件访问它,并且您可能正在咆哮错误的树。那说,这个:
内存映射文件,使用固定地址
0x60000000
通常是非常糟糕的主意,因为您之前无法控制mmap
之前的内容(如果有的话)。 MAP_FIXED
映射将简单地删除任何先前存在的映射。 如果您的库本身恰好被映射到那里,那么您将替换库.text
或.data
,结果几乎肯定是一个神秘的崩溃。< / p>