Tag: ruby

dyld:惰性符号绑定失败:找不到符号 – nm报告找到符号

这里有一个相当抽象的问题,因为我不知道从哪里开始自己的调查。 我有一个用CMake构造的C包,它生成librpdb.so; 我为同一个库设置了一个Ruby Gem,它生成了rpdb.bundle。 在Ruby中使用时,我得到了这个: dyld: lazy symbol binding failed: Symbol not found: _RPDB_RuntimeStorageController_sharedInstance Referenced from: /usr/local/lib/ruby/gems/1.9.1/gems/rpdb-0.1.0/lib/rpdb/rpdb.bundle Expected in: flat namespace 当我查看图书馆时,nm会报告: 000000000000ea40 T _RPDB_RuntimeStorageController_sharedInstance 因此看起来符号确实在库中。 那么,为什么绑定会失败呢?

Ruby方法的大O表示法?

我怎样才能找到Ruby方法的复杂性? 例如长度 ? 如果我查看源代码,我会看到: static VALUE rb_ary_length(VALUE ary) { long len = RARRAY_LEN(ary); return LONG2NUM(len); } 但我不知道如何阅读,以找到大O符号。

如何处理ruby Fiddle中的数组指针

我试图从Ruby FFI切换到Fiddle,现在它是Ruby std lib的一部分。 它虽然没有文档,但我很难弄清楚如何处理数组和指针。 特别是,如何将Ciddle接口写入C函数,如下所示: void my_func(double *, size_t len) 将它映射到Ruby非常简单: module Test extend Fiddle::Importer dlload ‘./lib/libTest.dylib’ extern ‘void my_func(double *, size_t)’ end 但是,我如何构建一个指向数组的指针,作为第一个参数传递? 谢谢!

变量的类型是什么?

我正在开发Ruby c扩展,我有来自c程序的代码, VALUE var = myFunction(arg1, arg2); int varType = TYPE(var); printf(“Type of the var is :: %d”, varType); 以上printf给出如下输出: Type of the var is :: 34 由于myFunction是inbuild函数,我不知道该函数的返回类型。 任何人都能告诉我myFunction返回的“var”变量的类型吗? 提前致谢。

存储redis密钥的最佳方式

我使用Redis存储一些信息并检测该信息随时间的变化(例如,考虑用户和位置)。 使用更长或更短的键名有什么价值? 使用更长的密钥更清晰,但使用更长的密钥名需要大量内存或性能吗? 以下是示例: SET L:123456 ” …” HSET U:987654321 loc 123456 time 要么 SET loc:{123456} ” …” HSET user:{U987654321} loc 123456 time

Ruby的Enumerable#zip是否在内部创建数组?

在Ruby中 -有人说, 优雅地比较两个枚举器 zip的问题在于它在内部创建数组,无论您传递的是什么Enumerable。 输入参数的长度还有另一个问题 我看了一下YARV中Enumerable#zip的实现,并看到了 static VALUE enum_zip(int argc, VALUE *argv, VALUE obj) { int i; ID conv; NODE *memo; VALUE result = Qnil; VALUE args = rb_ary_new4(argc, argv); int allary = TRUE; argv = RARRAY_PTR(args); for (i=0; i<argc; i++) { VALUE ary = rb_check_array_type(argv[i]); if (NIL_P(ary)) { allary = FALSE; break; } argv[i] […]

mkmf在编译C扩展时忽略子文件夹中的文件

我想像这样组织C源代码: + / | |___ + ext | | | |___ + native_extension | | | |___ + lib | | | | | |___ (Source files are kept in here – may contain sub-folders) | | | |___ native_extension.c | |___ native_extension.h | |___ extconf.rb | |___ + lib | | | |___ (Ruby […]

如何在Mac OS X上使用ulimit或每个进程为C或Ruby程序更改堆栈大小?

似乎为C程序或Ruby程序(使用C堆栈)设置堆栈大小的推荐方法是在Bash shell中使用ulimit 。 但 $ ulimit -s 8192 $ ulimit -s 16384 -bash: ulimit: stack size: cannot modify limit: Operation not permitted 而sudo也没有帮助。 有没有办法将其设置为16MB,32MB或64MB? 我认为应该有一种方法来设置每个程序调用,而不是设置系统范围的参数? 现在8192可能意味着8MB这是非常小的,如果将其与进程可以使用的数量进行比较,有时甚至高达2GB的RAM。 ( 更新说明: ulimit -a可以显示其当前值)。 ( 更新2:看起来似乎ulimit -s 是每个shell,如果你第一次设置它,它通常会工作。问题是你第二次设置它,然后它可能会返回一个错误)

为什么C和Ruby之间的模运算符(%)的行为对于负整数是不同的?

我在这里运行一些代码。 我试过-40 % 3 。 它给了我输出2 。 当我在C中执行相同的操作时,我得到: int i = (-40) % 3 printf(“%d”, i); 输出是 -1 两种语言如何在内部执行模运算?