我正在尝试绑定共享的CUDA库。作为快速验证,我写了以下代码:
var path = require('path');
var progress = require('progress-stream');
var fs = require('fs');
var _source = path.resolve('../inc/big.avi');// 1.5GB
var _target= '/tmp/a.avi';
var stat = fs.statSync(_source);
var str = progress({
length: stat.size,
time: 100
});
str.on('progress', function(progress) {
console.log(progress.percentage);
});
function copyFile(source, target, cb) {
var cbCalled = false;
var rd = fs.createReadStream(source);
rd.on("error", function(err) {
done(err);
});
var wr = fs.createWriteStream(target);
wr.on("error", function(err) {
done(err);
});
wr.on("close", function(ex) {
done();
});
rd.pipe(str).pipe(wr);
function done(err) {
if (!cbCalled) {
console.log('done');
cb && cb(err);
cbCalled = true;
}
}
}
copyFile(_source,_target);
此操作因#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
handle = dlopen ("libcuda.so", RTLD_LAZY);
if (!handle) {
fputs (dlerror(), stderr);
exit(1);
}
dlclose(handle);
}
但是,如果我检查ldconfig,我会得到:
libcuda.so: cannot open shared object file: No such file or directory.
所以似乎ldconfig -p | grep libcuda
libcuda.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcuda.so.1
libcuda.so.1 (libc6) => /usr/lib/i386-linux-gnu/libcuda.so.1
libcuda.so (libc6) => /usr/lib/i386-linux-gnu/libcuda.so
确实存在并且被系统看到。那么为什么libcuda.so
失败了?
这是在Ubuntu 14.04上。
答案 0 :(得分:1)
我可以从你的ldconfig -p
看到libcuda.so.1
x86_64没有符号链接,你只需要创建它,试试
sudo ln -svf /usr/lib/x86_64-linux-gnu/libcuda.so{.1,}
可能是您没有安装-dev
软件包。
或者只是改变
handle = dlopen ("libcuda.so", RTLD_LAZY);
到
handle = dlopen ("libcuda.so.1", RTLD_LAZY);
但第一种解决方案更好,因为当您使用libcuda.so.1
动态链接到-lcuda
时,符号链接必须是强制性的。