Re: btrfs-progs-4.8.3 libbtrfs missing symbols?
From: Mike Gilbert <hidden>
Date: 2016-11-23 18:50:14
On Wed, Nov 23, 2016 at 1:43 PM, Mike Gilbert [off-list ref] wrote:
On Wed, Nov 23, 2016 at 4:45 AM, David Sterba [off-list ref] wrote:quoted
On Tue, Nov 22, 2016 at 01:49:15PM -0500, Mike Gilbert wrote:quoted
Hi, I received a bug report about a build failure in a package (snapper) that utilizes libbtrfs. https://bugs.gentoo.org/show_bug.cgi?id=600078 To summarize the issue, the package has a configure test that executes the following: configure:16618: x86_64-pc-linux-gnu-gcc -o conftest -O2 -pipe -march=amdfam10 -frecord-gcc-switches -std=c99 -Wall -Wextra -Wformat=2 -Wmissing-prototypes -Wno-unused-parameter -DCONFDIR='"/etc/conf.d"' -Wl,-O1 -Wl,--as-needed conftest.c -lbtrfsquoted
&5/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/../../../../lib64/libbtrfs.so: undefined reference to `lookup_path_rootid' collect2: error: ld returned 1 exit status configure:16618: $? = 1 It seems that the "lookup_path_rootid" symbol is not included in the library. Could someone look into this?Thanks for the report, bug reproduced here. My referential snapper build does not fail so I did not know about that. I've now extended the library test to cover the missing symbol. As the build does not fail it's needed to actually run the built binary.That's very strange; I definitely get a build-time failure here. Maybe there's some difference in your toolchain. On current master: floppym@naomi btrfs-progs % make V=1 library-test [LD] library-test gcc -g -O1 -Wall -D_FORTIFY_SOURCE=2 -include config.h -DBTRFS_FLAT_INCLUDES -D_XOPEN_SOURCE=700 -fno-strict-aliasing -fPIC -I/home/floppym/src/btrfs-progs -I/home/floppym/src/btrfs-progs/kernel-lib -o library-test library-test.o -rdynamic -lbtrfs /usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/../../../../lib64/libbtrfs.so: undefined reference to `lookup_path_rootid' collect2: error: ld returned 1 exit status make: *** [Makefile:433: library-test] Error 1
Oh! Based on that command line, library-test is getting linked against /usr/lib64/libbtrfs.so instead of the freshly built copy in $PWD. You probably need to add -L. or -L$(TOPDIR) to that command in the Makefile.