Closed ds1982 closed 10 years ago
What does the following code output: ruby -rlibspotify -e 'p [Libspotify.binary_path, File.exist?(Libspotify.binary_path)]'
Output with my changes is:
["/var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/bin/armv5-linux", true]
Output with your original code is:
["/var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/bin", true]
Good! I needed to exclude the possibility of the pure ruby version being installed, but at least it appears that you have the arm-specific library. I should have seen it earlier based on the path, but it's nice to know the file exists where it should be. :)
Do you know if you run a hard or soft float OS?
At the moment, it appears as if the file /var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/bin/armv5-linux
does exist, but for some reason FFI cannot load it. Usually this is because of the library being for the wrong architecture.
I am running the official and latest Raspbian OS, which i think is an hardfloat OS. I thought this would work, because with other Libraries i could use the softfloat Versions too.
I will try to install a softfloat OS now and give a feedback how libspotify behaves there. Thanks for your fast help so far.
Hm. Indeed, the hard float vs. soft float would cause libspotify/FFI to behave like this. It cannot load soft float on hard float architecture.
I wonder why the hard float detection does not work on your RPI. What is the output of:
ruby -e 'puts `readelf -a #{RbConfig.ruby}`'
I tried to install your gem on several systems and architectures by now and i always experienced that it is hard to install your recommended nokorigi v1.4.7
while installing this gem things like this happen:
make
compiling xml_node_set.c
compiling xml_cdata.c
compiling xml_sax_push_parser.c
compiling xml_processing_instruction.c
compiling xml_document_fragment.c
compiling xml_schema.c
compiling html_entity_lookup.c
compiling xml_xpath_context.c
xml_xpath_context.c: In function ‘xpath_generic_exception_handler’:
xml_xpath_context.c:184:3: error: format not a string literal and no format arguments [-Werror=format-security]
cc1: some warnings being treated as errors
make: *** [xml_xpath_context.o] Error 1
Gem files will remain installed in /var/lib/gems/1.9.1/gems/nokogiri-1.4.7 for inspection.
Results logged to /var/lib/gems/1.9.1/gems/nokogiri-1.4.7/ext/nokogiri/gem_make.out
is it possible to switch to a newer version here (which would be much easier to install)?
This is why i can actually not test your gem on the softfloat OS for my Rpi, but i am still trying to get it managed.
Other thing is the hardfloat detection on the hardfloat Rpi OS:
Output of
ruby -e 'puts `readelf -a #{RbConfig.ruby}`'
is:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x8794
Start of program headers: 52 (bytes into file)
Start of section headers: 2956 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 29
Section header string table index: 28
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 00008134 000134 000019 00 A 0 0 1
[ 2] .note.ABI-tag NOTE 00008150 000150 000020 00 A 0 0 4
[ 3] .note.gnu.build-i NOTE 00008170 000170 000024 00 A 0 0 4
[ 4] .hash HASH 00008194 000194 0000b4 04 A 6 0 4
[ 5] .gnu.hash GNU_HASH 00008248 000248 0000c0 04 A 6 0 4
[ 6] .dynsym DYNSYM 00008308 000308 0001a0 10 A 7 1 4
[ 7] .dynstr STRTAB 000084a8 0004a8 000165 00 A 0 0 1
[ 8] .gnu.version VERSYM 0000860e 00060e 000034 02 A 6 0 2
[ 9] .gnu.version_r VERNEED 00008644 000644 000020 00 A 7 1 4
[10] .rel.dyn REL 00008664 000664 000008 08 A 6 0 4
[11] .rel.plt REL 0000866c 00066c 000048 08 A 6 13 4
[12] .init PROGBITS 000086b4 0006b4 00000c 00 AX 0 0 4
[13] .plt PROGBITS 000086c0 0006c0 000080 04 AX 0 0 4
[14] .text PROGBITS 00008740 000740 000164 00 AX 0 0 4
[15] .fini PROGBITS 000088a4 0008a4 000008 00 AX 0 0 4
[16] .rodata PROGBITS 000088ac 0008ac 000008 00 A 0 0 4
[17] .ARM.exidx ARM_EXIDX 000088b4 0008b4 000008 00 AL 14 0 4
[18] .eh_frame PROGBITS 000088bc 0008bc 000004 00 A 0 0 4
[19] .init_array INIT_ARRAY 000108c0 0008c0 000004 00 WA 0 0 4
[20] .fini_array FINI_ARRAY 000108c4 0008c4 000004 00 WA 0 0 4
[21] .jcr PROGBITS 000108c8 0008c8 000004 00 WA 0 0 4
[22] .dynamic DYNAMIC 000108cc 0008cc 000120 08 WA 7 0 4
[23] .got PROGBITS 000109ec 0009ec 000034 04 WA 0 0 4
[24] .data PROGBITS 00010a20 000a20 000008 00 WA 0 0 4
[25] .bss NOBITS 00010a28 000a28 000004 00 WA 0 0 1
[26] .ARM.attributes ARM_ATTRIBUTES 00000000 000a28 00002f 00 0 0 1
[27] .gnu_debuglink PROGBITS 00000000 000a57 000034 00 0 0 1
[28] .shstrtab STRTAB 00000000 000a8b 000100 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
EXIDX 0x0008b4 0x000088b4 0x000088b4 0x00008 0x00008 R 0x4
PHDR 0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4
INTERP 0x000134 0x00008134 0x00008134 0x00019 0x00019 R 0x1
[Requesting program interpreter: /lib/ld-linux-armhf.so.3]
LOAD 0x000000 0x00008000 0x00008000 0x008c0 0x008c0 R E 0x8000
LOAD 0x0008c0 0x000108c0 0x000108c0 0x00168 0x0016c RW 0x8000
DYNAMIC 0x0008cc 0x000108cc 0x000108cc 0x00120 0x00120 RW 0x4
NOTE 0x000150 0x00008150 0x00008150 0x00044 0x00044 R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
Section to Segment mapping:
Segment Sections...
00 .ARM.exidx
01
02 .interp
03 .interp .note.ABI-tag .note.gnu.build-id .hash .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.exidx .eh_frame
04 .init_array .fini_array .jcr .dynamic .got .data .bss
05 .dynamic
06 .note.ABI-tag .note.gnu.build-id
07
Dynamic section at offset 0x8cc contains 31 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libruby-1.9.1.so.1.9]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x86b4
0x0000000d (FINI) 0x88a4
0x00000019 (INIT_ARRAY) 0x108c0
0x0000001b (INIT_ARRAYSZ) 4 (bytes)
0x0000001a (FINI_ARRAY) 0x108c4
0x0000001c (FINI_ARRAYSZ) 4 (bytes)
0x00000004 (HASH) 0x8194
0x6ffffef5 (GNU_HASH) 0x8248
0x00000005 (STRTAB) 0x84a8
0x00000006 (SYMTAB) 0x8308
0x0000000a (STRSZ) 357 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x109ec
0x00000002 (PLTRELSZ) 72 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x866c
0x00000011 (REL) 0x8664
0x00000012 (RELSZ) 8 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x8644
0x6fffffff (VERNEEDNUM) 1
0x6ffffff0 (VERSYM) 0x860e
0x00000000 (NULL) 0x0
Relocation section '.rel.dyn' at offset 0x664 contains 1 entries:
Offset Info Type Sym.Value Sym. Name
00010a1c 00000115 R_ARM_GLOB_DAT 00000000 __gmon_start__
Relocation section '.rel.plt' at offset 0x66c contains 9 entries:
Offset Info Type Sym.Value Sym. Name
000109f8 00001316 R_ARM_JUMP_SLOT 000086d4 ruby_run_node
000109fc 00000716 R_ARM_JUMP_SLOT 000086e0 abort
00010a00 00000d16 R_ARM_JUMP_SLOT 000086ec __libc_start_main
00010a04 00000116 R_ARM_JUMP_SLOT 00000000 __gmon_start__
00010a08 00001516 R_ARM_JUMP_SLOT 00008704 ruby_init
00010a0c 00001816 R_ARM_JUMP_SLOT 00008710 ruby_options
00010a10 00001416 R_ARM_JUMP_SLOT 0000871c ruby_sysinit
00010a14 00001616 R_ARM_JUMP_SLOT 00008728 setlocale
00010a18 00001916 R_ARM_JUMP_SLOT 00008734 ruby_init_stack
Unwind table index '.ARM.exidx' at offset 0x8b4 contains 1 entries:
0x8794: 0x1 [cantunwind]
Symbol table '.dynsym' contains 26 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
2: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
3: 00010a2c 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
4: 000088a4 0 FUNC GLOBAL DEFAULT 15 _fini
5: 00010a28 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
6: 000086b4 0 FUNC GLOBAL DEFAULT 12 _init
7: 000086e0 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.4 (2)
8: 00010a28 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
9: 000088ac 4 OBJECT GLOBAL DEFAULT 16 _IO_stdin_used
10: 00010a2c 0 NOTYPE GLOBAL DEFAULT ABS __end__
11: 00010a2c 0 NOTYPE GLOBAL DEFAULT ABS _end
12: 00010a20 0 NOTYPE GLOBAL DEFAULT 24 __data_start
13: 000086ec 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.4 (2)
14: 00010a28 0 NOTYPE GLOBAL DEFAULT ABS _edata
15: 000088a0 4 FUNC GLOBAL DEFAULT 14 __libc_csu_fini
16: 00008794 0 FUNC GLOBAL DEFAULT 14 _start
17: 00008840 96 FUNC GLOBAL DEFAULT 14 __libc_csu_init
18: 00010a20 0 NOTYPE WEAK DEFAULT 24 data_start
19: 000086d4 0 FUNC GLOBAL DEFAULT UND ruby_run_node
20: 0000871c 0 FUNC GLOBAL DEFAULT UND ruby_sysinit
21: 00008704 0 FUNC GLOBAL DEFAULT UND ruby_init
22: 00008728 0 FUNC GLOBAL DEFAULT UND setlocale@GLIBC_2.4 (2)
23: 00010a2c 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
24: 00008710 0 FUNC GLOBAL DEFAULT UND ruby_options
25: 00008734 0 FUNC GLOBAL DEFAULT UND ruby_init_stack
Histogram for bucket list length (total of 17 buckets):
Length Number % of total Coverage
0 3 ( 17.6%)
1 7 ( 41.2%) 28.0%
2 4 ( 23.5%) 60.0%
3 2 ( 11.8%) 84.0%
4 1 ( 5.9%) 100.0%
Histogram for `.gnu.hash' bucket list length (total of 17 buckets):
Length Number % of total Coverage
0 3 ( 17.6%)
1 7 ( 41.2%) 30.4%
2 5 ( 29.4%) 73.9%
3 2 ( 11.8%) 100.0%
Version symbols section '.gnu.version' contains 26 entries:
Addr: 000000000000860e Offset: 0x00060e Link: 6 (.dynsym)
000: 0 (*local*) 0 (*local*) 0 (*local*) 1 (*global*)
004: 1 (*global*) 1 (*global*) 1 (*global*) 2 (GLIBC_2.4)
008: 1 (*global*) 1 (*global*) 1 (*global*) 1 (*global*)
00c: 1 (*global*) 2 (GLIBC_2.4) 1 (*global*) 1 (*global*)
010: 1 (*global*) 1 (*global*) 1 (*global*) 0 (*local*)
014: 0 (*local*) 0 (*local*) 2 (GLIBC_2.4) 1 (*global*)
018: 0 (*local*) 0 (*local*)
Version needs section '.gnu.version_r' contains 1 entries:
Addr: 0x0000000000008644 Offset: 0x000644 Link: 7 (.dynstr)
000000: Version: 1 File: libc.so.6 Cnt: 1
0x0010: Name: GLIBC_2.4 Flags: none Version: 2
Notes at offset 0x00000150 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.26
Notes at offset 0x00000170 with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 819f0640215b429108bdf01e19e5e1585698bdd7
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "6"
Tag_CPU_arch: v6
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_FP_arch: VFPv2
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_ABI_VFP_args: VFP registers
Tag_DIV_use: Not allowed
I tried to install your gem on several systems and architectures by now and i always experienced that it is hard to install your recommended nokorigi v1.4.7
Nokogiri is not a dependency of Spotify. How are you installing it?
Regarding the readelf output... it contains the tag that says it is hard float. Not sure why it doesn't match the Libspotify.hard_float? check. Hmm.
Spotify is requiring rbgccxml wich depends on nokogiri v1.4.7
i am installing all this with
"bundle install"
"gem install rbgccxml"
throws the same nokogiri error like above...
Regarding the hf-check:
RbConfig::CONFIG["host_cpu"]
returns only "arm"
so line 24 needs to be changed to
when /arm(\d+)?/
Regarding rbgccxml:
I installed rbgccxml gem this way without errors:
Hope this works without further errors now, but it seems to actually.
rbgccxml is a development dependency of spotify, not a runtime dependency. You should not need rbgccxml. How are you installing the spotify gem?
i am installing the spotify gem with
gem install spotify
After installing i try to run your examples which are complaining about missing dependencies like "pry", "plaything", ... These dependencies i install with
bundle install
which is installing rbgccxml too.
Alright, now we are on the same page. I understand.
I see from issue #28 that you managed to get the gem to work. How did you get it to find the libspotify library?
Did you do manual install, or change OS? What was the cause of the problem for this issue?
OK, i think we mixed up a few topics here, so i don't really understand your question.
Here is a short Timeline with what i did: tried to install spotify gem on Raspberry OS with hard float.
tried to install spotify gem on Raspberry's "wheezy" distro with soft float. ffi could load libspotify, but rbgccxml gem could not be installed. Solved like 4 posts above.
Problem on both OS:
Did this answer your question?
hard float detection in libspotify did not work. Solved like 5 posts above. ... Output with my changes is: ["/var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/bin/armv5-linux", true]
Output with your original code is: ["/var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/bin", true]
What were your changes? It is a bit hard to follow with all the malformatted text in this issue.
EDIT: Sorry, I see it now:
RbConfig::CONFIG["host_cpu"] returns only "arm"
So, if I understand correctly, the problem is that Libspotify.binary_path does not include the final armv5-linux
part on your particular OS?
RbConfig::CONFIG["host_cpu"]
returns only "arm", not "armvX" or anything
so line 24 in libspotify.rb needs to be changed from
when /armv(\d+)?/
to
when /arm(\d+)?/
So, if I understand correctly, the problem is that Libspotify.binary_path does not include the final armv5-linux part on your particular OS?
right. and this is because in libspotify.rb the "case" in line 19
case RbConfig::CONFIG["host_cpu"]
has no "else" + my posting above
I’ve created an issue on the libspotify gem for this, Burgestrand/libspotify#6.
Thanks for your patience! Also, thanks for cleaning up the comment formatting. It aids a lot in scanning the issue.
Since both issues are now being tracked — libspotify host_os detection and rbgccxml/nokogiri on raspberry pi — I think we can close this (#27) issue, and track the other two issues separately.
Hello, after reading this https://github.com/Burgestrand/spotify/issues/12 i tried to install your spotify gem on my RaspberryPi. Installation worked fine and without any errors. "bundle install" completed successfully, too.
Now i'm trying the examples an getting the following error:
After reading the above Issue #12 i looked into
/var/lib/gems/1.9.1/gems/libspotify-12.1.51.3-arm-linux/lib/libspotify.rb and thought that the hard/soft float thing cannot resolved on my system, so that "release_name" is empty. I tried to hardcode the "armv5-linux" binary which came with the libspotify-gem this way:
Now the error changed (and looks somehow better to me), but there still remains an error:
So where does the folder /Library come from and how can i fix this error?