首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ubuntu上编译eglibc-2.19时出现"error: conflicting types for‘sem_t’“

在Ubuntu上编译eglibc-2.19时出现"error: conflicting types for‘sem_t’“
EN

Stack Overflow用户
提问于 2015-10-04 12:30:30
回答 2查看 684关注 0票数 2

我试图在Ubuntu 14.04 LTS上构建eglibc-2.19,我是通过它下载的

代码语言:javascript
复制
apt-get source libc6

我按照安装说明操作,但当它遇到nptl时得到以下错误

代码语言:javascript
复制
gcc sem_init.c -c -std=gnu99 -fgnu89-inline -fno-stack-protector -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes      -U_FORTIFY_SOURCE   -I../include -I/home/gpanda/wksp/glibc/tmp2/glibc-build/nptl  -I/home/gpanda/wksp/glibc/tmp2/glibc-build  -I../sysdeps/unix/sysv/linux/x86_64/64/nptl  -I../sysdeps/unix/sysv/linux/x86_64/64  -I../nptl/sysdeps/unix/sysv/linux/x86_64  -I../nptl/sysdeps/unix/sysv/linux/x86  -I../sysdeps/unix/sysv/linux/x86  -I../sysdeps/unix/sysv/linux/x86_64  -I../sysdeps/unix/sysv/linux/wordsize-64  -I../nptl/sysdeps/unix/sysv/linux  -I../nptl/sysdeps/pthread  -I../libpthread/sysdeps/pthread  -I../sysdeps/pthread  -I../ports/sysdeps/unix/sysv/linux  -I../sysdeps/unix/sysv/linux  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../nptl/sysdeps/unix/sysv  -I../ports/sysdeps/unix/sysv  -I../sysdeps/unix/sysv  -I../sysdeps/unix/x86_64  -I../nptl/sysdeps/unix  -I../ports/sysdeps/unix  -I../sysdeps/unix  -I../sysdeps/posix  -I../libpthread/sysdeps/posix  -I../nptl/sysdeps/x86_64/64  -I../sysdeps/x86_64/64  -I../sysdeps/x86_64/fpu/multiarch  -I../sysdeps/x86_64/fpu  -I../sysdeps/x86/fpu  -I../sysdeps/x86_64/multiarch  -I../nptl/sysdeps/x86_64  -I../sysdeps/x86_64  -I../sysdeps/x86  -I../sysdeps/ieee754/ldbl-96  -I../sysdeps/ieee754/dbl-64/wordsize-64  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754/flt-32  -I../sysdeps/wordsize-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I../libpthread/include -I../libpthread  -I../nptl  -I../ports  -I.. -I../libio -I.  -I../libpthread/include  -D_LIBC_REENTRANT -include ../include/libc-symbols.h   -DNOT_IN_libc=1 -DIS_IN_libpthread=1 -DIN_LIB=libpthread    -o /home/gpanda/wksp/glibc/tmp2/glibc-build/nptl/sem_init.o -MD -MP -MF /home/gpanda/wksp/glibc/tmp2/glibc-build/nptl/sem_init.o.dt -MT /home/gpanda/wksp/glibc/tmp2/glibc-build/nptl/sem_init.o
In file included from sem_init.c:20:0:
../libpthread/include/semaphore.h:28:0: warning: "SEM_FAILED" redefined [enabled by default]
 #define SEM_FAILED ((void *) 0)
 ^
In file included from ../libpthread/include/semaphore.h:26:0,
                 from sem_init.c:20:
../nptl/sysdeps/unix/sysv/linux/x86/bits/semaphore.h:33:0: note: this is the location of the previous definition
 #define SEM_FAILED      ((sem_t *) 0)
 ^
In file included from sem_init.c:20:0:
../libpthread/include/semaphore.h:30:28: error: conflicting types for ‘sem_t’
 typedef struct __semaphore sem_t;
                            ^
In file included from ../libpthread/include/semaphore.h:26:0,
                 from sem_init.c:20:
../nptl/sysdeps/unix/sysv/linux/x86/bits/semaphore.h:40:3: note: previous declaration of ‘sem_t’ was here
 } sem_t;
   ^
make[2]: *** [/home/gpanda/wksp/glibc/tmp2/glibc-build/nptl/sem_init.o] Error 1
make[2]: Leaving directory `/home/gpanda/wksp/glibc/tmp2/eglibc-2.19/nptl'
make[1]: *** [nptl/subdir_lib] Error 2
make[1]: Leaving directory `/home/gpanda/wksp/glibc/tmp2/eglibc-2.19'
make: *** [all] Error 2

这是libpthread和nptl之间的某种冲突吗?如何解决这个问题?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-10-04 19:23:11

考虑到LinuxThreads已经被NPTL取代,所以我只是从eglibc目录中删除了附加的libpthread,并重新做了配置和make,那么现在一切似乎都正常了。

请参阅LinuxThreadsNPTL

顺便说一句,因为我没有使用标准的前缀路径作为配置的“-- /usr =”选项,所以我需要将libstdc++.so.6和libgcc_s.so.1复制到我当前的构建路径才能通过"make check“。

请参阅glibc Known_testsuite_failures

票数 1
EN

Stack Overflow用户

发布于 2016-10-10 02:13:50

我得到了同样的错误,因为我运行了一个普通的./configure --prefix=/opt,所以我改为运行apt-get source -b eglibc,并注意到它使用的配置标志:

代码语言:javascript
复制
(exec 3>&1; exit `( ( (  cd build-tree/i386-libc && CC="i686-linux-gnu-gcc-4.8" CXX="i686-linux-gnu-g++-4.8" AUTOCONF=false MAKEINFO=: /home/sashoalm/Workspace/apt-get-source/libc/eglibc-2.19/configure --host=i686-linux-gnu --build=$configure_build --prefix=/usr --without-cvs --enable-add-ons=libidn,"nptl " --enable-profile --without-selinux --enable-stackguard-randomization --enable-obsolete-rpc --with-pkgversion="Ubuntu EGLIBC 2.19-0ubuntu6.9" --with-bugurl="https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs"   --with-headers=/home/sashoalm/Workspace/apt-get-source/libc/eglibc-2.19/debian/include --enable-kernel=2.6.24 --with-selinux --enable-multi-arch ) 2>&1 3>&-; echo $? >&4) | tee  -a build-tree/log-build-i686-linux-gnu-libc >&3) 4>&1`)

该命令相当复杂,比通常的apt-get source更复杂,因为glibc坚持从单独的目录构建。实际的配置标志为:

--host=i686-linux-gnu --build=$configure_build --prefix=/usr --without-cvs --enable-add-ons=libidn,"nptl " --enable-profile --without-selinux --enable-stackguard-randomization --enable-obsolete-rpc --with-pkgversion="Ubuntu EGLIBC 2.19-0ubuntu6.9" --with-bugurl="https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs" --with-headers=/home/sashoalm/Workspace/apt-get-source/libc/eglibc-2.19/debian/include --enable-kernel=2.6.24 --with-selinux --enable-multi-arch

当然,它适用于这些参数,因为这是Ubuntu维护者用来编译包的方法。

我真的不知道哪个标志可以防止这个错误,但是如果你在你的Ubuntu系统上使用这个命令,或者apt-get source -b eglibc提供的确切参数,它应该可以很好地工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32930043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档