Udisks isn't building

This is the approved revision of this page, as well as being the most recent.

This is an issue that Azerthoth ran into. He was trying to build udisks and was running into a linking issue:

  CC     udisks_probe_sas_expander-udisks-probe-sas-expander.o
  CCLD   udisks-probe-sas-expander
  CC     udisks_lvm_pv_export-udisks-lvm-pv-export.o
  CCLD   udisks-lvm-pv-export
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/../../../../lib64/liblvm2app.so: undefined reference to `floor'
collect2: ld returned 1 exit status
make[4]: *** [udisks-lvm-pv-export] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

The line that looked funny was /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/../../../../lib64/liblvm2app.so: undefined reference to `floor'. That would indicate that liblvm2app.so was linking to the floor function but that function at the time of linking udisks-lvm-pv-export was undefined. The floor function is defined in glibc within libm. Consequently, we compared the floor linkage in our libms:

      gurganbldesktop brantgurga # readelf -s /lib64/libm-2.11.2.so | grep floor
         200: 000000000002e3b0   156 FUNC    WEAK   DEFAULT   12 floorf@@GLIBC_2.2.5
         204: 0000000000036f10    39 FUNC    WEAK   DEFAULT   12 floorl@@GLIBC_2.2.5
         297: 0000000000018da0   392 FUNC    WEAK   DEFAULT   12 floor@@GLIBC_2.2.5
       
      Beast enUS # readelf -s /lib64/libm-2.10.1.so | grep floor
         200: 000000000002e910   171 FUNC    WEAK   DEFAULT   12 floorf@@GLIBC_2.2.5
         204: 00000000000375d0    39 FUNC    WEAK   DEFAULT   12 floorl@@GLIBC_2.2.5
         297: 0000000000018da0   392 FUNC    WEAK   DEFAULT   12 floor@@GLIBC_2.2.5

The floor linkage was the same. So maybe there was an issue with the liblvm2app.so linkage:

      gurganbldesktop brantgurga # readelf -s /lib64/liblvm2app.so.2.2 | grep floor
         220: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND floor@GLIBC_2.2.5 (11)
       
      Beast enUS # readelf -s /lib64/liblvm2app.so.2.2 | grep floor
          19: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND floor

This seemed to be the issue. For some reason, the floor function wasn't getting linked in lvm2-2.02.70. Why that was the case was never found, but lvm2-2.02.68 and lvm2-2.02.75 was tried and the linkage worked fine for both. Case closed.