我来自蟒蛇背景,我正试图赶上R,所以请耐心等待
我有一个R文件 - util.R包含以下行:
util.add <- function(a,b) a + b
util.sub <- function(a,b) { a - b }
Run Code Online (Sandbox Code Playgroud)
我的来源如下:
source('path/util.R')
我现在有两个函数对象,想要编写一个函数,如下所示:
getFilePath(util.add)
这会给我这个结果
[1] "path/util.R"
下面的列y应该是['Reg','Reg','Swp','Swp']
In [1]: pd.read_csv('/tmp/test3.csv')
Out[1]:
x,y
^@^@^@,Reg
^@^@^@,Reg
I,Swp
I,Swp
In [2]: ! cat /tmp/test3.csv
x y
0
1 NaN NaN
2 I Swp
3 I Swp
In [3]: f = open('/tmp/test3.csv', 'rb'); print(repr(f.read()))
'x,y\n \x00\x00\x00,Reg\n \x00\x00\x00,Reg\nI,Swp\nI,Swp\n'
Run Code Online (Sandbox Code Playgroud) 我的目标是使用boost python创建一个python扩展模块.问题是,当共享库中的代码使用dlopen访问同一个库中的符号时,它会失败(详情如下).看起来模块中的符号没有加载到python进程的符号表中
我在共享库myTest.so中有以下代码
// File 1
extern "C" void target_func() {
std::cout << "Works!" << std::endl;
}
// File 2
typedef void (*Func) ();
void run() {
void *handle = dlopen(0, RTLD_NOW | RTLD_GLOBAL)
Func *method = (Func *)dlsym(handle, "target_func");
// check if method is NULL and fail
}
Run Code Online (Sandbox Code Playgroud)
它包含在一个boost python模块中,如图所示 -
BOOST_PYTHON_MODULE(myTest) {
def("run", run);
}
Run Code Online (Sandbox Code Playgroud)
导入python模块并执行时,上面的代码失败
import myTest
myTest.run()
undefined symbol: target_func
Run Code Online (Sandbox Code Playgroud)
但是当我将myTest.so与调用run的main函数链接时,没有问题
int main(int argc, char **argv) {
run();
}
Output: Works!
Run Code Online (Sandbox Code Playgroud)