From: Jeremy Kerr Date: Thu, 1 Jul 2021 06:26:57 +0000 (+0800) Subject: Separate libs from link flags to fix link-order compile failure X-Git-Tag: v1.0-rc0~114^2~2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=0f8265b11cae3a4e7e71146ae7c6836ec2d9a632;p=users%2Fsagi%2Flibnvme.git Separate libs from link flags to fix link-order compile failure 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 --- diff --git a/configure b/configure index c81f48ea..91a56d05 100755 --- 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 diff --git a/examples/Makefile b/examples/Makefile index 24f85746..c909c87e 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -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) diff --git a/src/Makefile b/src/Makefile index a4c33dab..b706a6da 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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 diff --git a/test/Makefile b/test/Makefile index ed050d0b..2df695e0 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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)