解决了-见下文.
我正在尝试在一个ubuntu12.04迷航映像上安装重熔丝 gem。在它的extconf中,它检查保险丝并失败。
我安装了apt-get fuse和fuse-utils,/lib/libfuse.so.2也存在。我尝试了下面的会话,如下:
nm验证库中确实存在主函数(我不知道这是否有效)。LD_LIBRARY_PATH找到库(也不确定这是否有效)我现在被困住了,因为我不知道这怎么会失败。不是找到图书馆了吗?如果是的话,它是不是没有找到正确的函数呢?它在哪里找图书馆?我还需要哪些其他技术来调试这个呢?
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文件:
$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留在工作目录中。看看这个,我看到了以下的失败:
"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,并获得了更多关于故障的详细信息,包括它在哪里查找库:
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。有了这些添加,我可以安装和使用宝石。
发布于 2014-08-18 00:24:08
mkmf调用应该在当前目录中生成一个mkmf.log。里面应该是它如何称呼gcc的细节,以及具体的不起作用的地方。您可以提取这些命令并继续向下钻取。
https://stackoverflow.com/questions/25354743
复制相似问题