On 2015年08月24日 10:24, Kang Kai wrote:
On 2015年08月22日 00:08, Khem Raj wrote:
On Fri, Aug 21, 2015 at 1:37 AM, <[email protected]> wrote:
From: Kai Kang <[email protected]>

atftp fails to build with gcc 5.2:

tftp_def.h:54:14: warning: inline function 'Strncpy' declared but never defined

GCC 5 defaults to -std=gnu11 instead of -std=gnu89. The semantics of
inline function changes. Pass '-std=gnu89' to gcc to compile atftp.

Ref:
https://gcc.gnu.org/gcc-5/porting_to.html

Signed-off-by: Kai Kang <[email protected]>
---
  meta-networking/recipes-daemons/atftp/atftp_git.bb | 2 ++
  1 file changed, 2 insertions(+)

diff --git a/meta-networking/recipes-daemons/atftp/atftp_git.bb b/meta-networking/recipes-daemons/atftp/atftp_git.bb
index b53f637..0ece58f 100644
--- a/meta-networking/recipes-daemons/atftp/atftp_git.bb
+++ b/meta-networking/recipes-daemons/atftp/atftp_git.bb
@@ -32,6 +32,8 @@ USERADD_PACKAGES = "${PN}d"
USERADD_PARAM_${PN}d = "--system --no-create-home --shell /bin/false \
                          --user-group nobody"

+EXTRA_OEMAKE = "CFLAGS='${CFLAGS} -std=gnu89'"
this is a woraround and will work, however if you are at and fix it
once for all that will be desirable. eg. this file you could move the
definition of
inline function into the relevant .h file and make it a static inline

Hi Raj,

Thanks. I'll try it.

I tried to move the definition to relevant .h file but it didn't work. It complained when did link:

options.o: In function `opt_options_to_string':
/buildarea3/kkang/poky-20141111/builds/x86-64-with-meta-oe/tmp/work/core2-64-poky-linux/atftp/0.7.1+gitAU
TOINC+be3291a18c-r3/git/options.c:345: undefined reference to `Strncpy'
options.o:/buildarea3/kkang/poky-20141111/builds/x86-64-with-meta-oe/tmp/work/core2-64-poky-linux/atftp/0
.7.1+gitAUTOINC+be3291a18c-r3/git/options.c:347: more undefined references to `Strncpy' follow
collect2: error: ld returned 1 exit status

And it has other issues about inline functions that I didn't mention in the commit message:

git/argz.c:44:8: error: redefinition of 'argz_next'

That's because more complex definitions:

In argz.h:
======================================
extern char *argz_next (__const char *__restrict __argz, size_t __argz_len,
                        __const char *__restrict __entry) __THROW;


#ifdef __USE_EXTERN_INLINES
extern inline char *
argz_next (__const char *__argz, size_t __argz_len,
           __const char *__entry)
{
  return __argz_next (__argz, __argz_len, __entry);
}
#endif /* Use extern inlines.  */
======================================

In argz.c:
======================================
char * argz_next (const char *argz, size_t argz_len, const char *entry)
{
...
}
======================================

It seems gcc 5 doesn't support redefinition, right?

Compare to Debian, it fixed this issue by pass "-std=gnu89" to compiler too.

Ref:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=777783#12

Thanks,
Kai


--Kai


+
  do_install_append() {
      install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/atftpd.init ${D}${sysconfdir}/init.d/atftpd
--
1.9.1

--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel




--
Regards,
Neil | Kai Kang

--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel

Reply via email to