标签: shared

基于unix的系统中的延迟负载等效

什么是基于unix的系统中的延迟负载等价物.

我有一个代码foo.cpp,在用gcc编译时,我将它链接到共享对象(共有三个.so文件.).每个.so文件都有不同的选项.

./foo -v需要libversion.so ./foo -update需求libupdate.so

我需要这些库的符号只能在运行时解析.

./foo -v 即使libupdate.so库不存在也不应该破坏.

它在Windows中使用延迟加载选项(在dll的属性中).在Unix系统中它的等价物是什么.

威尔-lazy选项确实在UNIX一样吗?如果是这样,在哪里包含此选项:在makefile中还是在链接器ld中?

c unix linker shared object

8
推荐指数
1
解决办法
2640
查看次数

在Linux中查找共享库的加载地址

在运行时,我需要打印一个地址,然后找到该地址所属的功能.这些函数位于共享库中,因此不在固定地址.我的地图文件显然只显示每个共享库func的相对偏移量.是否有可能在运行时查询已加载库的位置,以便我可以从我的地址中减去该值以获得正确的映射文件偏移量?

目前我正在做一个有点hacky的approch,我也打印出库中一个函数的地址,然后在map文件中找到该函数来确定加载地址必须在哪里.我宁愿有一个通用的方法,不要求你命名一个引用函数.

(GDB在我的设置中不可用).谢谢.

linux load shared memory-address

8
推荐指数
2
解决办法
8300
查看次数

为什么链接器会修改--defsym"绝对地址"

目标:使用可执行文件中的函数(不导出符号)的共享库.

手段: gcc -Wl,--defsym,function=0x432238

该手册页指出:

"--defsym symbol=expression" Create a global symbol in the output
file, containing the absolute address given by expression.
Run Code Online (Sandbox Code Playgroud)

令我沮丧的dlopen()0x7ffff676f000,将共享库的基地址(这是64位代码)添加到导出的"绝对符号地址":

        executable        shared library
        ---------- linker --------------
symbol: 0x432238   =====> 0x7ffff6ba1238
Run Code Online (Sandbox Code Playgroud)

objdump 0x432238在库中显示正确的符号地址(),但一旦加载dlopen(),符号就有地址0x7ffff6ba1238.

如果,一旦加载,我手动将库符号修补到正确的地址,然后一切正常(否则,库SEGFAULTs).

  • 为什么修改"绝对地址"?
  • 怎么避免呢?

更新:

我对以下答复的技术相关性提出质疑,并且更多的是"更新":

使用--defsym在PIC库/可执行文件中定义重定位符号是没有意义的(除了在没有任何可用功能的情况下污染二进制文件之外,它不起任何作用).

因此,PIC共享库或PIC可执行文件中--defsym的唯一相关用法应该是定义(非重定位)"绝对地址".

顺便说一句,如果您懒得阅读手册页,这是--defsym的官方目的:

"在输出文件中创建一个全局符号,其中包含absolute address给定的表达式."

充其量,这是一个Linux链接器的影响,这将是微不足道的修复.对于那些不能等待拒绝人员实现(并修复)他们的错误的人来说,解决方案是在缺陷链接器加载二进制映像之后修补重定位表.

然后,-defsym在PIC库/可执行文件中变得很有用,在我看来这是一个值得欢迎的进展.

linux linker shared

8
推荐指数
1
解决办法
3366
查看次数

Perl进程之间共享的只读内存

我希望让我的Perl程序使用多个核心.它逐步读取查询输入,并将其中的块与每个运行的从文件加载的只读数据结构进行比较.该数据结构通常是几千兆字节,是一小组压缩字符串,用于小型C例程.当进程被分叉时,所有内容都被复制,这在多核计算机上快速打开RAM.我尝试了几个非标准模块,但都会导致速度变慢和/或破坏RAM.我认为,对于只读数据,Perl不会坚持要复制.其他语言可以做到.有人有想法吗?

memory perl shared process readonly

8
推荐指数
1
解决办法
1745
查看次数

Windows上的共享内存访问权限

我开发了一个使用共享内存的Windows应用程序---即内存映射文件,用于进程间通信.我有一个Windows服务,它执行一些处理并定期将数据写入内存映射文件.我有一个单独的Windows应用程序,它从内存映射文件中读取并显示信息.该应用程序在Windows XP,XP Pro和Server 2003上按预期工作,但不在Vista上.

我可以看到写入内存映射文件的数据是由Windows服务正确发生的,因为我可以使用文本编辑器打开文件并查看存储的消息,但"消费者"应用程序无法从文件中读取.这里需要注意的一件有趣的事情是,如果我关闭使用者应用程序并重新启动它,它会消耗先前写入内存映射文件的消息.

另外,另一个奇怪的事情是当我使用远程桌面连接到Windows主机并通过远程桌面调用/使用消费者应用程序时,我得到相同的行为.但是,如果我调用远程桌面并使用以下命令连接到目标主机的控制台会话:mstsc -v:servername /F -console,一切正常.

这就是为什么我认为问题与权限有关.任何人都可以评论这个吗?

编辑:

我用来创建内存映射文件的ACL和同步访问的Mutex对象如下:

TCHAR * szSD = TEXT("D:")
               TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
               TEXT("(A;;GA;;;BG)")
               TEXT("(A;;GA;;;AN)")
               TEXT("(A;;GA;;;AU)")
               TEXT("(A;;GA;;;LS)")
               TEXT("(A;;GA;;;RD)")
               TEXT("(A;;GA;;;WD)")
               TEXT("(A;;GA;;;BA)"); 
Run Code Online (Sandbox Code Playgroud)

我认为这可能是问题的一部分.

windows shared memory-access

7
推荐指数
2
解决办法
1万
查看次数

Rails在共享主机上的应用程序?

有没有办法在可以安装Ruby的共享主机上部署本地制作的rails应用程序?

ruby shared shared-hosting ruby-on-rails

7
推荐指数
1
解决办法
7923
查看次数

将私有访问文件写入另一个应用程序的文件目录

这两个应用程序具有相同的sharedUserId.当我在app1中使用此代码时

context.openFileOutput("/data/data/org.me.app2/files/shared-data.dat", MODE_PRIVATE)
Run Code Online (Sandbox Code Playgroud)

我得到一个异常,告诉我该文件包含一个路径分隔符.

我正在尝试将app1中的文件写入app2的存储空间.(我当然需要确保app2的文件目录首先存在)

理想情况下,我会写一个用户特定的目录而不是特定于应用程序的目录,但我不知道是否可以这样做

android shared file

7
推荐指数
3
解决办法
1万
查看次数

Git:服务器上多个用户的repo

我在服务器上创建了一个Git repo,并希望它被几个人使用,即属于同一个Unix组的用户.它还有一个工作副本,因为我们可能有一个共同的工作副本.

因此,我将该Git repo目录的拥有组设置为该Unix组.

问题是,每当有人推送到该存储库时,新文件/目录都将所有者设置为该用户及其组的用户名,而不是我们的公共组.此外,所有这些新文件/目录成为rwxr-xr-x.

我尝试过,git config core.sharedRepository group但这不起作用.它现在使文件/目录成为rwxrwsr-x但仍然是错误的组集.

unix git file-permissions shared

7
推荐指数
1
解决办法
2401
查看次数

共享库可以调用另一个共享库吗?

可以从另一个共享库中共享库加载和调用函数吗?

我有共享库libDsmTestLib.so,它使用另一个共享库libDsmShared.solibPINDsmShared.so

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE           := DsmTestLib
LOCAL_SRC_FILES        := DSM_Library.cpp

LOCAL_LDLIBS := -lDsmShared
LOCAL_LDLIBS += -lPINDsmShared

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

当我创建libDsmTestLib.so并想在我的android java应用程序中使用它时,如下所示:

package com.dsm;

import android.app.Activity;
import android.os.Bundle;

public class dsmTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    static {
        try {
            System.loadLibrary("DsmTestLib");
        }
        catch( UnsatisfiedLinkError e ) {
             System.err.println("Native code library failed to load.\n" + e);
        } …
Run Code Online (Sandbox Code Playgroud)

android shared

7
推荐指数
2
解决办法
2万
查看次数

共享内存和分布式内存的主要区别

关于共享内存分布式内存之间的区别,我有点困惑.你能澄清一下吗?

  1. 是一个处理器的共享内存和许多(网络)分布?

  2. 如果我们有共享内存,为什么我们需要分布式内存?

memory distributed shared cpu-architecture multiprocessing

7
推荐指数
2
解决办法
1万
查看次数