首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ubuntu上安装rfuse?

如何在ubuntu上安装rfuse?
EN

Stack Overflow用户
提问于 2014-08-17 23:56:43
回答 1查看 609关注 0票数 1

解决了-见下文.

我正在尝试在一个ubuntu12.04迷航映像上安装重熔丝 gem。在它的extconf中,它检查保险丝并失败。

我安装了apt-get fusefuse-utils/lib/libfuse.so.2也存在。我尝试了下面的会话,如下:

  1. 复制故障
  2. 使用nm验证库中确实存在主函数(我不知道这是否有效)。
  3. 尝试确保使用LD_LIBRARY_PATH找到库(也不确定这是否有效)

我现在被困住了,因为我不知道这怎么会失败。不是找到图书馆了吗?如果是的话,它是不是没有找到正确的函数呢?它在哪里找图书馆?我还需要哪些其他技术来调试这个呢?

代码语言:javascript
复制
vagrant@n1:~$ ruby2.1 -rmkmf -e 'have_library("fuse")'
checking for main() in -lfuse... no
vagrant@n1:~$ nm -D -C -g /lib/libfuse.so.2 | grep main
0000000000016080 T cuse_lowlevel_main
0000000000016570 T fuse_main
0000000000016840 T fuse_main
0000000000016860 T fuse_main_compat1
0000000000016840 T fuse_main_compat2
0000000000016880 T fuse_main_real
0000000000016890 T fuse_main_real
0000000000016830 T fuse_main_real
0000000000016880 T fuse_main_real_compat22
0000000000016830 T fuse_main_real_compat25
vagrant@n1:~$ env LD_LIBRARY_PATH=/lib ruby2.1 -rmkmf -e 'have_library("fuse")'
checking for main() in -lfuse... no

vagrant@n1:~$ uname -a
Linux n1 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
vagrant@n1:~$ file /lib/libfuse.so.2.8.6
/lib/libfuse.so.2.8.6: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xdb7e3872302adb18b73703be89224938e5575441, stripped
vagrant@n1:~$ file $(which ruby2.1)
/usr/bin/ruby2.1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x9a5173cfb87a0bdb27026d7913fcff5729652848, stripped

下面是一个设置我正在测试的机器的Vagrantfile文件:

代码语言:javascript
复制
$script = <<SCRIPT

sudo apt-get update
sudo apt-get install python-software-properties -y
sudo apt-add-repository ppa:brightbox/ruby-ng -y
sudo apt-get update
sudo apt-get install ruby2.1 ruby2.1-dev fuse fuse-utils -y

SCRIPT

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"

  config.vm.provision "shell", inline: $script

  config.vm.define "n1" do |n1|
      n1.vm.hostname = "n1"
      n1.vm.network "private_network", ip: "172.20.20.10"
  end
end

溶液

调用have_library (或任何mkmf代码)将mkmf.log留在工作目录中。看看这个,我看到了以下的失败:

代码语言:javascript
复制
"gcc -o conftest -I/usr/include/x86_64-linux-gnu/ruby-2.1.0 -I/usr/include/ruby-2.1.0/ruby/backward -I/usr/include/ruby-2.1.0 -I. -D_FORTIFY_SOURCE=2   -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -fPIC conftest.c  -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -L/build/buildd/ruby2.1-2.1.2/debian/lib -fstack-protector -rdynamic -Wl,-export-dynamic     -lruby-2.1 -lfuse  -lpthread -lrt -lgmp -ldl -lcrypt -lm   -lc"
/usr/bin/ld: cannot find -lfuse
collect2: ld returned 1 exit status
checked program was:
/* begin */
 1: #include "ruby.h"
 2:
 3: /*top*/
 4: extern int t(void);
 5: int main(int argc, char **argv)
 6: {
 7:   if (argc > 1000000) {
 8:     printf("%p", &t);
 9:   }
10:
11:   return 0;
12: }
13: int t(void) { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
/* end */

我尝试了ld -lfuse --verbose,并获得了更多关于故障的详细信息,包括它在哪里查找库:

代码语言:javascript
复制
attempt to open /lib/libfuse.so failed
attempt to open /lib/libfuse.a failed

这两个都不存在!我不知道为什么不行,但我试着将它与sudo ln -s /lib/libfuse.so.2 /lib/libfuse.so连接起来,现在ld成功了。

继续gem安装,我还缺少了两个库:sudo apt-get install -y libfuse-dev make。有了这些添加,我可以安装和使用宝石。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-18 00:24:08

mkmf调用应该在当前目录中生成一个mkmf.log。里面应该是它如何称呼gcc的细节,以及具体的不起作用的地方。您可以提取这些命令并继续向下钻取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25354743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档