]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
Separate libs from link flags to fix link-order compile failure
authorJeremy Kerr <jk@codeconstruct.com.au>
Thu, 1 Jul 2021 06:26:57 +0000 (14:26 +0800)
committerJeremy Kerr <jk@codeconstruct.com.au>
Fri, 6 Aug 2021 03:44:36 +0000 (11:44 +0800)
Currently, builds fail for me with a link error:

  /usr/bin/ld: ../src//libnvme.a(tree.ol): in function `nvme_ns_get_uuid':
  src/nvme/tree.c:1321: undefined reference to `uuid_copy'
  /usr/bin/ld: ../src//libnvme.a(json.ol): in function `json_read_config':
  src/nvme/json.c:152: undefined reference to `json_object_from_file'

Turns out my linker ("GNU ld (GNU Binutils for Debian) 2.35.2") is
sensitive to object argument order - the dependent libs need to be listed
last.

This change splits the required libraries into a LIBS variable, used
last on the Makefile rules to perform the link.

Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
configure
examples/Makefile
src/Makefile
test/Makefile

index c81f48ea4df40b3eed12661f52eb47dbf4532e01..91a56d0546fc69f9c8ca7eb6f1e4a8cd1145ffe4 100755 (executable)
--- a/configure
+++ b/configure
@@ -228,16 +228,16 @@ print_config "cpp" "${cpp}"
 
 if test "$libuuid" = "yes"; then
   output_sym "CONFIG_LIBUUID"
-  echo "override LDFLAGS += -luuid" >> $config_host_mak
+  echo "override LIBS += -luuid" >> $config_host_mak
   echo "override LIB_DEPENDS += uuid" >> $config_host_mak 
 fi
 if test "$systemd" = "yes"; then
   output_sym "CONFIG_SYSTEMD"
-  echo "override LDFLAGS += -lsystemd" >> $config_host_mak
+  echo "override LIBS += -lsystemd" >> $config_host_mak
 fi
 if test "$libjsonc" = "yes"; then
     output_sym "CONFIG_JSONC"
-    echo "override LDFLAGS += -ljson-c" >> $config_host_mak
+    echo "override LIBS += -ljson-c" >> $config_host_mak
     echo "override LIB_DEPENDS += json-c" >> $config_host_mak
 fi
 if test "$cpp" = "yes"; then
index 24f8574660f07111f11353df31937ca9d4d256c6..c909c87e407e30e69ea42000e0244ad5e2275385 100644 (file)
@@ -12,7 +12,7 @@ all_targets += telemetry-listen display-tree display-columnar discover-loop
 all: $(all_targets)
 
 %: %.c
-       $(QUIET_CC)$(CC) $(CFLAGS) -o $@ $< -lnvme ${LDFLAGS}
+       $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lnvme $(LIBS)
 
 clean:
        rm -f $(all_targets)
index a4c33dababc4921fb99c892ac39f026fc5507f5c..b706a6da45c25d1822ca717930b52706522bca8a 100644 (file)
@@ -72,7 +72,7 @@ libnvme.a: $(libnvme_objs) $(libccan_objs)
        $(QUIET_RANLIB)$(RANLIB) libnvme.a
 
 $(libname): $(libnvme_sobjs) $(libccan_sobjs) libnvme.map
-       $(QUIET_CC)$(CC) $(SO_CFLAGS) -Wl,--version-script=libnvme.map -Wl,-soname=$(soname) -o $@ $(libnvme_sobjs) $(libccan_sobjs) $(LINK_FLAGS)
+       $(QUIET_CC)$(CC) $(SO_CFLAGS) -Wl,--version-script=libnvme.map -Wl,-soname=$(soname) -o $@ $(libnvme_sobjs) $(libccan_sobjs) $(LINK_FLAGS) $(LIBS)
 
 install: $(all_targets)
        $(INSTALL) -D -m 644 libnvme.a $(libdir)/libnvme.a
index ed050d0bd68e9b65d64011699838c55d8d7f0e63..2df695e0ce69c629181e299983bee44579d5ee45 100644 (file)
@@ -23,10 +23,10 @@ all: $(all_targets)
 CXXFLAGS ?= -lstdc++
 
 %: %.cc
-       $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) $(CXXFLAGS) -o $@ $< -lnvme
+       $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) $(CXXFLAGS) -o $@ $< -lnvme $(LIBS)
 
 %: %.c
-       $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lnvme
+       $(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lnvme $(LIBS)
 
 clean:
        rm -f $(all_targets)