From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Thomas Monjalon <thomas.monjalon@6wind.com>
Cc: dev@dpdk.org, Panu Matilainen <pmatilai@redhat.com>,
Christian Ehrhardt <christian.ehrhardt@canonical.com>
Subject: Re: [PATCH 1/2] mk: prevent overlinking in applications
Date: Thu, 9 Jun 2016 14:05:13 +0100 [thread overview]
Message-ID: <57596989.50601@intel.com> (raw)
In-Reply-To: <7354386.zBuGXxEf9j@xps13>
On 6/9/2016 11:10 AM, Thomas Monjalon wrote:
> Hi Ferruh,
>
> 2016-05-27 17:48, Ferruh Yigit:
>> Replace --no-as-needed linker flag with --as-needed flag, which will
>> only link libraries directly called by application. This requires inter
>> library dependencies resolved correctly.
>>
>> Not linking all libraries cause a compile error for lpcap and possible
>> to have other similar compiler errors, so increasing the scope of
>> --start-group argument.
>
> What is the error?
>
This is with -as-needed flag, and static library compilation:
.../dpdk/build/lib/librte_pmd_pcap.a(rte_eth_pcap.o): In function
`eth_dev_stop':
rte_eth_pcap.c:(.text+0xcc1): undefined reference to `pcap_dump_close'
rte_eth_pcap.c:(.text+0xcd6): undefined reference to `pcap_close'
rte_eth_pcap.c:(.text+0xd19): undefined reference to `pcap_close'
rte_eth_pcap.c:(.text+0xd58): undefined reference to `pcap_close'
/root/development/dpdk/build/lib/librte_pmd_pcap.a(rte_eth_pcap.o): In
function `open_tx_pcap':
rte_eth_pcap.c:(.text+0x190b): undefined reference to `pcap_open_dead'
rte_eth_pcap.c:(.text+0x191b): undefined reference to `pcap_dump_open'
...
pcap pmd has libpcap calls, but while linking final application
(testpmd), linker is not able to find objects that has these.
The command line for compilation is:
gcc ... -o test ... -Wl,--whole-archive <dpdk libs> -Wl,-lpcap
-Wl,--start-group <more dpdk libs> -Wl,-lrte_pmd_pcap <more dpdk libs>
-Wl,--end-group -Wl,--no-whole-archive
-lpcap is provided, but since before -lrte_pmd_pcap, references not
resolved.
Previously, with "-no-as-needed" flag, all shared libraries linked
always, which was preventing compile error.
>> cmdline_test application causes compile error because of cyclic
>> dependency between librte_eal <-> librte_mempool. A workaround added to
>> cmdline_test for compile error.
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>
>> --- a/app/cmdline_test/Makefile
>> +++ b/app/cmdline_test/Makefile
>> @@ -46,6 +46,7 @@ SRCS-y += commands.c
>>
>> CFLAGS += -O3
>> CFLAGS += $(WERROR_FLAGS)
>
> A comment is required here to explain the workaround.
>
Sure, I will add a comment and send a new version of the patch.
>> +LDFLAGS += -no-as-needed
>
> The option should be --no-as-needed.
Right
>
>> --- a/mk/exec-env/linuxapp/rte.vars.mk
>> +++ b/mk/exec-env/linuxapp/rte.vars.mk
>> @@ -46,7 +46,7 @@ EXECENV_CFLAGS = -pthread
>> endif
>>
>> # Workaround lack of DT_NEEDED entry
>
> This comment is obsolete now.
Will remove.
>
>> -EXECENV_LDFLAGS = --no-as-needed
>> +EXECENV_LDFLAGS = --as-needed
>
> Why put this option for Linux only?
When this option not defined at all, different compilers behave
different, some has --as-needed as default and cause compilation issues,
I guess that is why for Linux --no-as-needed is forces. I assume BSD
compilers by default use --no-as-needed, so we don't have any
compilation problem.
And it looks like there is no specific reason to not force BSD to
--as-needed, I will test it.
> Shouldn't we restrict this option to app.mk only?
Having --no-needed flag only for app should be OK. Let me test first,
and as a result should we move this to app.mk?
>
>> --- a/mk/rte.app.mk
>> +++ b/mk/rte.app.mk
>> @@ -58,6 +58,7 @@ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
>> #
>>
>> _LDLIBS-y += --whole-archive
>> +_LDLIBS-y += --start-group
>
> --start-group must be used only to solve circular dependencies.
> Ideally we should not use it. I think it's needed only because
> of EAL logs using mempool (must be removed).
No, this is not the reason, please check above lpcap compile error, that
is the reason of this update.
> Why extending it?
> I'm afraid we are masking some issues.
But if we have a convention to add external libraries after dpdk
libraries, that also should solve this issue, but that is more update
than just updating --start-group.
>
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += -lrte_distributor
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder
>> @@ -111,8 +112,6 @@ _LDLIBS-y += -lcrypto
>> endif
>> endif # !CONFIG_RTE_BUILD_SHARED_LIBS
>>
>> -_LDLIBS-y += --start-group
>> -
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS) += -lrte_kvargs
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF) += -lrte_mbuf
>> _LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += -lrte_ip_frag
>
next prev parent reply other threads:[~2016-06-09 13:06 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-19 15:38 Underlinked libs and overlinked applications - an issue? Christian Ehrhardt
2016-05-19 18:17 ` Thomas Monjalon
2016-05-20 11:01 ` Panu Matilainen
2016-05-20 12:41 ` Christian Ehrhardt
2016-05-20 16:43 ` Christian Ehrhardt
2016-05-20 16:50 ` [PATCH] mk: fix underlinking issues of most librte libraries Christian Ehrhardt
2016-05-20 17:08 ` Thomas Monjalon
2016-05-24 9:56 ` Panu Matilainen
2016-05-24 10:11 ` Christian Ehrhardt
2016-05-26 13:13 ` Ferruh Yigit
2016-05-27 5:59 ` Panu Matilainen
2016-05-27 16:15 ` Ferruh Yigit
2016-05-27 16:48 ` [PATCH 1/2] mk: prevent overlinking in applications Ferruh Yigit
2016-05-27 16:48 ` [PATCH 2/2] mk: reduce scope of whole-archive to pmd libraries Ferruh Yigit
2016-06-10 9:03 ` Thomas Monjalon
2016-06-10 9:57 ` Ferruh Yigit
2016-06-10 10:18 ` Thomas Monjalon
2016-06-10 11:06 ` Ferruh Yigit
2016-06-10 12:21 ` Thomas Monjalon
2016-06-10 13:35 ` Ferruh Yigit
2016-06-09 10:10 ` [PATCH 1/2] mk: prevent overlinking in applications Thomas Monjalon
2016-06-09 13:05 ` Ferruh Yigit [this message]
2016-06-10 13:19 ` [PATCH v2 0/6] reduce " Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 1/6] mk: sort drivers in static application link list Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 2/6] mk: fix driver dependencies order for static application Thomas Monjalon
2016-06-10 14:49 ` Ferruh Yigit
2016-06-10 14:54 ` Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 3/6] mk: remove library grouping during application linking Thomas Monjalon
2016-06-10 14:54 ` Ferruh Yigit
2016-06-10 15:14 ` Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 4/6] mk: prevent overlinking in applications Thomas Monjalon
2016-06-10 14:56 ` Ferruh Yigit
2016-06-10 15:15 ` Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 5/6] mk: sort libraries in level order when linking Thomas Monjalon
2016-06-10 13:19 ` [PATCH v2 6/6] mk: reduce scope of whole-archive static linking Thomas Monjalon
2016-06-10 15:03 ` Ferruh Yigit
2016-06-10 15:18 ` Thomas Monjalon
2016-06-10 18:32 ` [PATCH v3 0/6] reduce overlinking in applications Ferruh Yigit
2016-06-10 18:32 ` [PATCH v3 1/6] mk: sort drivers in static application link list Ferruh Yigit
2016-06-10 19:38 ` Wiles, Keith
2016-06-10 18:32 ` [PATCH v3 2/6] mk: fix driver dependencies order for static application Ferruh Yigit
2016-06-10 18:32 ` [PATCH v3 3/6] mk: sort libraries when linking, move pmd libs to higher level Ferruh Yigit
2016-06-13 9:29 ` Thomas Monjalon
2016-06-13 10:04 ` Ferruh Yigit
2016-06-13 10:21 ` Thomas Monjalon
2016-06-13 10:29 ` Ferruh Yigit
2016-06-10 18:32 ` [PATCH v3 4/6] mk: sort libraries when linking, move external libs to lower level Ferruh Yigit
2016-06-10 18:32 ` [PATCH v3 5/6] mk: remove library grouping during application linking Ferruh Yigit
2016-06-10 18:32 ` [PATCH v3 6/6] mk: prevent overlinking in applications Ferruh Yigit
2016-06-11 6:34 ` Thomas Monjalon
2016-06-13 9:05 ` Ferruh Yigit
2016-06-13 9:24 ` Christian Ehrhardt
2016-06-13 9:48 ` [PATCH] mk: fix missing DEPDIRS to avoid libarary underlinking Christian Ehrhardt
2016-06-13 10:08 ` Thomas Monjalon
2016-06-13 10:20 ` Christian Ehrhardt
2016-06-13 11:06 ` [PATCH v2 0/2] mk: fix more library underlinking Christian Ehrhardt
2016-06-13 11:06 ` [PATCH v2 1/2] mk: fix missing vhost dependency to pthread to avoid libarary underlinking Christian Ehrhardt
2016-06-13 11:06 ` [PATCH v2 2/2] mk: fix missing DEPDIRS " Christian Ehrhardt
2016-06-13 14:16 ` [PATCH v2 0/2] mk: fix more library underlinking Thomas Monjalon
2016-06-13 14:14 ` [PATCH v2 0/6] reduce overlinking in applications Thomas Monjalon
2016-06-07 8:23 ` [PATCH] mk: fix underlinking issues of most librte libraries Thomas Monjalon
2016-06-07 9:25 ` Panu Matilainen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57596989.50601@intel.com \
--to=ferruh.yigit@intel.com \
--cc=christian.ehrhardt@canonical.com \
--cc=dev@dpdk.org \
--cc=pmatilai@redhat.com \
--cc=thomas.monjalon@6wind.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.