我需要update-directory-autoloads在一个小脚本中使用函数.当我尝试使用作为目录名称的参数调用此函数时,我收到此错误:
Wrong type argument: stringp, nil.
电话看起来像这样:
(update-directory-autoloads "~/test")
我现在正在研究Rust的LLVM教程.我已经实现了Kaleidoscope REPL的一些部分.它很适合我,但突然停止工作,现在每一次计算值的尝试都结束了LLVM ERROR: Target does not support MC emission!.它似乎发生在将Rust编译器更新到最新的每晚之后(但我不确定).
相关的代码片段如下.
初始化功能:
#[allow(non_snake_case)]
pub unsafe fn LLVMInitializeNativeTarget() {
llvm::LLVMInitializeX86TargetInfo();
llvm::LLVMInitializeX86Target();
llvm::LLVMInitializeX86TargetMC();
}
Run Code Online (Sandbox Code Playgroud)
模块创建:
let module = llvm::LLVMModuleCreateWithNameInContext(module_name.to_c_str().as_ptr(), context);
Run Code Online (Sandbox Code Playgroud)
执行引擎创建:
let mut exec_engine = 0 as llvm::ExecutionEngineRef;
let mut error = 0 as *const c_char;
LLVMCreateExecutionEngineForModule(&mut exec_engine, module, &mut error);
assert!(exec_engine != 0 as llvm::ExecutionEngineRef);
Run Code Online (Sandbox Code Playgroud)
编译和运行功能:
pub fn run(value: llvm::ValueRef, context: &Context) -> f64 {
unsafe {
let result = LLVMRunFunction(context.exec_engine,
value,
0,
0 as *const GenericValueRef);
let ty = …Run Code Online (Sandbox Code Playgroud) 如何在Rust中获取函数地址?'和某些功能'究竟意味着什么?
我会做什么地址
std::mem::transmute::<_, u32>(function)
Run Code Online (Sandbox Code Playgroud)
要么
std::mem::transmute::<_, u32>(&function)
Run Code Online (Sandbox Code Playgroud)
(当然是在32位系统上)?
是什么
&function as *const _ as *const c_void
Run Code Online (Sandbox Code Playgroud)
给?
UPD.@Shepmaster下面给出的答案给出了这个问题的答案(虽然也给出了其他不相关但可能对某些人有用的信息).我在这里总结一下.
获取地址很简单
funct as *const ()
Run Code Online (Sandbox Code Playgroud)
对函数的引用似乎创建了一个局部变量
let a = &42;
Run Code Online (Sandbox Code Playgroud) 现有的构建系统通常具有某种安装目标,可以手动(用于安装在/ usr/local或用户可以访问的其他位置)或自动使用(通过基于二进制的发行版的包构建系统或基于源的包管理器)那些).
安装使用Cargo的软件的预期方式是什么?模拟的make install应该是什么样的?
Cargo本身使用额外的configure/make来处理配置,检测系统依赖性,运行cargo build和安装.
这是使用Cargo构建的任何其他软件的正确方法吗?这意味着是否有计划通过Cargo本身来完成这项任务,或者Cargo仅作为依赖程序获取和编译的工具,而无需任何配置/检测已安装的deps /安装?
或者是否有计划添加此功能?