标签: shared

GCC 共享库问题

我正在尝试使用gcc在ubuntu上创建一个共享库
我只有一个简单的类(shared.h和shared.cpp)和一个使用它的客户端(main.cpp)
这是我的makefile,我仍然无法来编译程序。

all:
    #compile object(fPIC: creates position independent code)
    gcc -fPIC -Wall -g -c shared.cpp

    #compile shared library
    gcc -shared -Wl,-soname,libshared.so.1 -o libshared.so.1.0.1 shared.o -lc

    #link shared library
    gcc -g -o main main.cpp -L. -lshared
Run Code Online (Sandbox Code Playgroud)
  • 我确信第一行是正确的
  • 我不确定“-lc”的作用。我认为它会将一些东西传递给链接器?
  • 我不想安装该库,我只想能够从当前目录链接它。我已经尝试过:export LD_LIBRARY_PATH=.
    但似乎没有什么区别。一切都在当前目录中。

    错误:/usr/bin/ld:找不到 -lshared

如何让编译器检查我的库的当前目录?

c++ ubuntu gcc shared

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

模板函数传递给共享库(c ++)

一点思考实验......成分1:(预编译)共享库中的一个类,它具有一个指向从ostream派生的对象的指针的函数:

void ClassName::SetDefaultStream(std::ostream *stream)
Run Code Online (Sandbox Code Playgroud)

成分2:

我自己的类派生自std :: ostream,带有一些通用的模板化流操作符:

class MyStream : public std::ostream
{
   public:
      template <typename T> MyStream &operator<<(const T &data)
      {
         std::cout << data;
         return *this;
      }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我将此类的实例化地址传递给SetDefaultStream方法,会发生什么?在编译时,编译器不知道将在共享类中将哪些类型应用于流,因此肯定不会合成任何代码?它会无法编译,它会编译然后在运行时崩溃,会从计算机中冒出来吗?

c++ templates shared function

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

fork的共享内存

我想在两个进程之间创建一个共享内存.我用了fork().一个孩子试图改变这个共享记忆,母亲创造另一个孩子,所以新孩子试图改变相同的记忆.这是我在C编程中的代码.(Ubuntu的)

mylist ch=NUL; 
f=fork();
if(!f){
        pba=shmget(KEYSHM,sizeof(char),0); /*created shared memory*/
        ch=(mylist *) shmat(pba,0,0);
        ch->name=ugur;
        ch->surname=cedric;
...do something...
}
else{
        if(ch)
        printf("this is top of mylist %s"ch->name);
.......do something
}
Run Code Online (Sandbox Code Playgroud)

它永远不会写ch-> name.为什么?我创建了一个共享内存.为什么父进程无法读取?

c unix memory fork shared

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

VB.NET中共享函数内参数/参数和变量的行为

我是VB.NET的新手,将遗留系统转换为.NET世界.最近我一直在审查现有的代码,因为我在团队中很晚才加入了这个项目.

所以我发现许多类中有许多共享函数(不是共享类).我怀疑这可能会产生一些问题,如果两个请求(即两个不同的HTTP请求同一个方法,因为它是一个WCF应用程序,当然暴露的方法不共享但内部调用的方法是共享的)来到相同的共享方法和两个调用该方法可能有不同的方法参数/参数,覆盖彼此的参数.

简而言之,如果共享方法有一个将要处理的参数列表,那么鉴于通过两个http请求多次访问共享方法,是否存在任何不一致的可能性.

我会感谢每一个回应线程.

谢谢,JJ

vb.net multithreading shared function

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

同时运行两个C程序共享内存,怎么样?

我有两个c文件:producer.c和consumer.c.Consumer在内存中创建共享缓冲区,并等待生产者将项目放入缓冲区以供使用.生产者将共享内存附加到其内存映射,然后开始将项目放入缓冲区.

问题是如何编译和运行它们?

这是实际的任务.(我知道我可以使用一个c文件使用线程,但这不是我被要求做的.)

在这一部分中,您将开发一个生产者 - 消费者应用程序,它将使用共享内存进行进程通信(POSIX共享内存,而不是System V共享内存).将有N个生产者和N个消费者.N可以是1,2或3.

您将开发一个生产者程序(producer.c)和一个使用者程序(consumer.c).启动时,生产者程序将创建N个子进程,这些进程将充当N个生成器(即每个子进程将是生产者进程).

类似地,当启动时,消费者程序将创建N个子进程,其中每个子进程将充当消费者进程.你会认为消费者被识别为0,1,2,取决于N.例如,如果N是2,那么将有两个消费者,0和1.

消费者计划将首先运行.运行时,使用者程序将首先创建大小为4 KB的共享内存.这个共享内存将是您将拥有共享单个缓冲区的位置.生产者和消费者可以访问缓冲区.缓冲区大小为100.它最多可以容纳100个项目(整数).在共享内存中,您可以使用其他一些您认为必要的共享变量.消费者程序还将创建一个或多个信号量(您决定了多少).

然后它将使用fork()系统调用创建N个子进程(N个使用者)(您不需要使用exec()系统调用).在创建子进程之后,消费者程序(父进程)的主要进程不应该终止.它应该等到所有孩子(即消费者)完成任务并终止.当所有子节点终止时,它将从系统中删除(删除)共享内存.它还将删除(删除)信号量.然后它也可以终止.

每个生产者将读取正整数的输入文件(每行一个整数),并且只通过位于生产者和消费者之间的共享内存(由消费者程序创建)中的共享缓冲区传递整数.

如果z mod N等于消费者的ID,则每个消费者将从共享缓冲区读取整数并将接收的整数z写入与消费者相关联的输出文件.例如,如果N为3且消费者的ID为2且消费者已收到整数7,则它将不执行任何操作(忽略),但如果它收到8,则会将整数写入其输出文件.输出文件将在一行中包含一个整数.当生产者和消费者访问共享缓冲区时,他们应该使用信号量以便访问同步.另外,如果缓冲区已满,生产者应该睡觉,如果没有消费,消费者应该睡觉.我们不应该忙着等待.您将使用POSIX信号量(命名信号量).消费者计划将按如下方式调用:
消费者N ...

这里,N是要创建的使用者进程的数量.此参数的值必须与生产者程序的相应参数相同.这里是消费者将使用ID X的输出文件的名称.输入的输出文件名的数量将等于N.是我们可以用来标识共享内存的名称.是我们可以用来标识信号量的名称(它可以是可用于许多信号量名称的前缀).调用生产者时必须使用这些相同的名称.生产者程序将被命名为生产者,并将使用以下参数调用:
producer N ...

这里,N是生产者的数量.它是生产者X的输入文件的名称.输入文件是存储整数的文本文件.我们输入的输入文件名的数量将等于N.文件中可以有一个或多个整数.输入文件可能非常庞大(数十亿整数).是我们可以用来识别共享内存的名称.是我们可以用来识别信号量的名称.

程序的示例调用可以如下所示.
消费者3 out0.txt out1.txt out2.txt mysmem mysemaphores producer 3 in0.txt in1.txt in2.txt mysmem mysemaphore

c memory shared

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

具有映射驱动器的SMB和Python

我正在构建一个应用程序系统,用于侦听转储到smb共享驱动器上共享的文件夹中的文件.我已经将smb驱动器安装到机器上,我不应该能够做一个简单的file.open()吗?

  file = open("//drive/location/of/file/file.txt")
  lines = file.readlines()
  for line in lines:
       print line
  file.close()
Run Code Online (Sandbox Code Playgroud)

我在使用Snow Leopard的Mac上,我必须承认我更习惯于Windows开发,所以我可能会误解某些东西.任何帮助将非常感激.

我已经看到了几个类似的堆栈溢出问题,比如这个问题使用pysmbc来读取samba上的文件

但这些是关于以编程方式连接,我已经将驱动器映射到我的机器.

python macos smb shared drive

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

CUDA共享内存不比全球快?

嗨我有内核功能,我需要比较字节.我想要搜索的区域被分成块,因此4k字节的数组被分成4k/256 = 16个块.块中的每个线程都在idx上读取数组,并将其与另一个数组进行比较,这就是我想要搜索的内容.我通过两种方式做到了这一点:

1.比较全局内存中的数据,但块中的线程通常需要读取相同的地址.

2.将数据从全局内存复制到共享内存,并以与上述相同的方式比较共享内存中的字节.读同一地址仍有问题.复制到共享内存如下所示:

myArray[idx] = global[someIndex-idx];
whatToSearch[idx] = global[someIndex+idx];
Run Code Online (Sandbox Code Playgroud)

其余的代码是一样的.仅在共享阵列中执行对示例2中的数据的操作.

但是第一个选项比共享内存快10%左右,为什么?谢谢你的解释.

arrays shared cuda compare find

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

Grails自定义验证器,获取对字段名称的引用

我正在尝试为属性编写一个通用的自定义验证器,使其通用我需要在闭包内对字段名称的引用,代码如下在config.groovy

grails.gorm.default.constraints = {
nameShared(validator: {val, obj, errors->
        Pattern p = Pattern.compile("[a-zA-Z0-9-]{1,15}")
        Matcher m = p.matcher(val)
        boolean b = m.matches()
        if(!b)
        errors.rejectValue('name', "${obj.class}.name.invalid", "Name is invalid")

    })
Run Code Online (Sandbox Code Playgroud)

在我的域类中

class Student{
  String name

  static constraints = {
       name(shared:'nameShared')
   }
}

class Teacher{
  String firstName
  String lastName

  static constraints = {
     firstName(shared:'nameShared')
  }
}
Run Code Online (Sandbox Code Playgroud)

我想对name和firstName使用相同的验证器,但由于我在验证器中对fieldName进行硬编码,它将始终用于name而不是firstName,所以我想知道是否有任何方式我可以获得对fieldname并使验证器通用,请帮助

grails shared global customvalidator

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

MATLAB可用内存,无需清除命令

我需要在没有清除命令的情况下使用Matlab释放内存(我在并行工具箱的parfor循环中,无法调用clear);我读的是,例如,

clear v  
Run Code Online (Sandbox Code Playgroud)

我可以设定

v=[]
Run Code Online (Sandbox Code Playgroud)

问题是:使用'= []',我会取消分配'v'的内存,或者只是将v设置为空值,并且先前的内存仍在分配,然后无法使用?谢谢

matlab shared memory-management clear parfor

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

使用Swift Singleton

我有以下单例课程:

class Singleton {
    static let sharedInstance = Singleton()
}
Run Code Online (Sandbox Code Playgroud)

在网上几乎找不到关于如何使用Singleton模式的众多快速实现的信息。我以前在Objective-C的先前应用程序中使用过它,但对我来说似乎更直接了。

例如,如果我想创建可以在应用程序中的任何地方使用的自定义对象数组,那么我将如何声明它以及如何实现它。在我的Objective-C Singleton类中,我在类文件中创建全局变量,然后像这样实现它:

singletonClass *mySingleton = [singletonClass sharedsingletonClass];
mySingleton.whatever = "blaaaah"
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!我也是这里的新手,也是Swift的新手。

singleton shared swift

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