Closed bkauler closed 6 years ago
If anyone wants to reproduce my situation exactly, I got uclibc-ng 1.0.30 from here:
https://downloads.uclibc-ng.org/releases/
My .config file:
#
# Automatically generated file; DO NOT EDIT.
# uClibc-ng 1.0.30 C Library Configuration
#
# TARGET_aarch64 is not set
# TARGET_alpha is not set
# TARGET_arc is not set
# TARGET_arm is not set
# TARGET_avr32 is not set
# TARGET_bfin is not set
# TARGET_c6x is not set
# TARGET_cris is not set
# TARGET_csky is not set
# TARGET_frv is not set
# TARGET_h8300 is not set
# TARGET_hppa is not set
TARGET_i386=y
# TARGET_ia64 is not set
# TARGET_lm32 is not set
# TARGET_m68k is not set
# TARGET_metag is not set
# TARGET_microblaze is not set
# TARGET_mips is not set
# TARGET_nds32 is not set
# TARGET_nios2 is not set
# TARGET_or1k is not set
# TARGET_powerpc is not set
# TARGET_sh is not set
# TARGET_sparc is not set
# TARGET_sparc64 is not set
# TARGET_tile is not set
# TARGET_x86_64 is not set
# TARGET_xtensa is not set
#
# Target Architecture Features and Options
#
TARGET_ARCH="i386"
FORCE_OPTIONS_FOR_ARCH=y
# CONFIG_386 is not set
# CONFIG_486 is not set
# CONFIG_586 is not set
CONFIG_686=y
TARGET_SUBARCH="i686"
#
# Using ELF file format
#
ARCH_HAS_DEPRECATED_SYSCALLS=y
ARCH_LITTLE_ENDIAN=y
#
# Using Little Endian
#
ARCH_HAS_MMU=y
ARCH_USE_MMU=y
UCLIBC_HAS_FLOATS=y
UCLIBC_HAS_FPU=y
DO_C99_MATH=y
DO_XSI_MATH=y
UCLIBC_HAS_FENV=y
UCLIBC_HAS_LONG_DOUBLE_MATH=y
KERNEL_HEADERS="/usr/include"
HAVE_DOT_CONFIG=y
#
# General Library Settings
#
DOPIC=y
ARCH_HAS_UCONTEXT=y
HAVE_SHARED=y
FORCE_SHAREABLE_TEXT_SEGMENTS=y
LDSO_LDD_SUPPORT=y
LDSO_CACHE_SUPPORT=y
LDSO_PRELOAD_ENV_SUPPORT=y
LDSO_PRELOAD_FILE_SUPPORT=y
LDSO_BASE_FILENAME="ld.so"
LDSO_STANDALONE_SUPPORT=y
LDSO_PRELINK_SUPPORT=y
UCLIBC_STATIC_LDCONFIG=y
LDSO_RUNPATH=y
LDSO_RUNPATH_OF_EXECUTABLE=y
LDSO_SAFE_RUNPATH=y
LDSO_SEARCH_INTERP_PATH=y
LDSO_LD_LIBRARY_PATH=y
UCLIBC_CTOR_DTOR=y
LDSO_GNU_HASH_SUPPORT=y
# HAS_NO_THREADS is not set
# UCLIBC_HAS_LINUXTHREADS is not set
UCLIBC_HAS_THREADS_NATIVE=y
UCLIBC_HAS_THREADS=y
UCLIBC_HAS_TLS=y
PTHREADS_DEBUG_SUPPORT=y
UCLIBC_HAS_SYSLOG=y
UCLIBC_HAS_LFS=y
# MALLOC is not set
# MALLOC_SIMPLE is not set
MALLOC_STANDARD=y
UCLIBC_DYNAMIC_ATEXIT=y
UCLIBC_HAS_UTMPX=y
UCLIBC_HAS_UTMP=y
UCLIBC_SUSV2_LEGACY=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_HAS_CONTEXT_FUNCS=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_SUSV4_LEGACY=y
# UCLIBC_STRICT_HEADERS is not set
UCLIBC_HAS_STUBS=y
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
UCLIBC_HAS___PROGNAME=y
UCLIBC_HAS_PTY=y
ASSUME_DEVPTS=y
UNIX98PTY_ONLY=y
UCLIBC_HAS_GETPT=y
UCLIBC_HAS_LIBUTIL=y
UCLIBC_HAS_TM_EXTENSIONS=y
UCLIBC_HAS_TZ_CACHING=y
UCLIBC_HAS_TZ_FILE=y
UCLIBC_HAS_TZ_FILE_READ_MANY=y
UCLIBC_TZ_FILE_PATH="/etc/TZ"
UCLIBC_FALLBACK_TO_ETC_LOCALTIME=y
#
# Advanced Library Settings
#
UCLIBC_PWD_BUFFER_SIZE=256
UCLIBC_GRP_BUFFER_SIZE=256
#
# Support various families of functions
#
UCLIBC_LINUX_SPECIFIC=y
UCLIBC_HAS_GNU_ERROR=y
UCLIBC_BSD_SPECIFIC=y
UCLIBC_HAS_BSD_ERR=y
UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
# UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL is not set
UCLIBC_NTP_LEGACY=y
# UCLIBC_SV4_DEPRECATED is not set
UCLIBC_HAS_REALTIME=y
UCLIBC_HAS_ADVANCED_REALTIME=y
UCLIBC_HAS_EPOLL=y
UCLIBC_HAS_XATTR=y
UCLIBC_HAS_PROFILING=y
UCLIBC_HAS_CRYPT_IMPL=y
UCLIBC_HAS_SHA256_CRYPT_IMPL=y
UCLIBC_HAS_SHA512_CRYPT_IMPL=y
UCLIBC_HAS_CRYPT=y
UCLIBC_HAS_NETWORK_SUPPORT=y
UCLIBC_HAS_SOCKET=y
UCLIBC_HAS_IPV4=y
UCLIBC_HAS_IPV6=y
UCLIBC_USE_NETLINK=y
UCLIBC_SUPPORT_AI_ADDRCONFIG=y
UCLIBC_HAS_BSD_RES_CLOSE=y
UCLIBC_HAS_COMPAT_RES_STATE=y
UCLIBC_HAS_EXTRA_COMPAT_RES_STATE=y
UCLIBC_HAS_RESOLVER_SUPPORT=y
#
# String and Stdio Support
#
UCLIBC_HAS_STRING_GENERIC_OPT=y
UCLIBC_HAS_STRING_ARCH_OPT=y
UCLIBC_HAS_STDIO_FUTEXES=y
UCLIBC_HAS_CTYPE_TABLES=y
UCLIBC_HAS_CTYPE_SIGNED=y
# UCLIBC_HAS_CTYPE_UNSAFE is not set
UCLIBC_HAS_CTYPE_CHECKED=y
# UCLIBC_HAS_CTYPE_ENFORCED is not set
UCLIBC_HAS_WCHAR=y
UCLIBC_HAS_LIBICONV=y
UCLIBC_HAS_LIBINTL=y
UCLIBC_HAS_LOCALE=y
# UCLIBC_BUILD_MINIMAL_LOCALE is not set
UCLIBC_BUILD_ALL_LOCALE=y
# UCLIBC_HAS_XLOCALE is not set
UCLIBC_HAS_HEXADECIMAL_FLOATS=y
# UCLIBC_HAS_GLIBC_DIGIT_GROUPING is not set
UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y
UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set
# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set
# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set
# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set
UCLIBC_HAS_STDIO_BUFSIZ_4096=y
# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set
UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set
# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set
# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set
UCLIBC_HAS_STDIO_GETC_MACRO=y
UCLIBC_HAS_STDIO_PUTC_MACRO=y
UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y
UCLIBC_HAS_FOPEN_LARGEFILE_MODE=y
UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y
UCLIBC_HAS_FOPEN_CLOSEEXEC_MODE=y
UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
UCLIBC_HAS_PRINTF_M_SPEC=y
UCLIBC_HAS_ERRNO_MESSAGES=y
UCLIBC_HAS_SYS_ERRLIST=y
UCLIBC_HAS_SIGNUM_MESSAGES=y
UCLIBC_HAS_SYS_SIGLIST=y
UCLIBC_HAS_GNU_GETOPT=y
UCLIBC_HAS_GETOPT_LONG=y
UCLIBC_HAS_GNU_GETSUBOPT=y
# UCLIBC_HAS_ARGP is not set
#
# Big and Tall
#
UCLIBC_HAS_REGEX=y
UCLIBC_HAS_FNMATCH=y
UCLIBC_HAS_WORDEXP=y
UCLIBC_HAS_NFTW=y
UCLIBC_HAS_FTW=y
UCLIBC_HAS_FTS=y
UCLIBC_HAS_GLOB=y
UCLIBC_HAS_GNU_GLOB=y
#
# Library Installation Options
#
RUNTIME_PREFIX="/usr/i386-linux-uclibc"
DEVEL_PREFIX="/usr/i386-linux-uclibc/usr"
MULTILIB_DIR="lib"
HARDWIRED_ABSPATH=y
#
# Security options
#
# UCLIBC_BUILD_PIE is not set
UCLIBC_HAS_SSP=y
# SSP_QUICK_CANARY is not set
UCLIBC_BUILD_SSP=y
UCLIBC_BUILD_RELRO=y
UCLIBC_BUILD_NOW=y
UCLIBC_BUILD_NOEXECSTACK=y
#
# Development/debugging options
#
CROSS_COMPILER_PREFIX=""
UCLIBC_EXTRA_CFLAGS=""
# DODEBUG is not set
DOSTRIP=y
# DOASSERTS is not set
# SUPPORT_LD_DEBUG is not set
# SUPPORT_LD_DEBUG_EARLY is not set
# UCLIBC_MALLOC_DEBUGGING is not set
UCLIBC_HAS_BACKTRACE=y
WARNINGS="-Wall"
# EXTRA_WARNINGS is not set
Also, I am running EasyOS Pyro32 0.9.6:
http://bkhome.org/news/201808/easyos-32-bit-version-096.html
...when running, click "sfsget" icon at top of screen to download a "devx" SFS file, which is a compile compiling environment -- the GUI explains everything. The is also a x86_64 release.
A couple more details:
With uclibc-ng, when I ran "make install", it installed to /usr/usr/i386-linux-uclibc In EasyOS, PREFIX is preset to "/usr", so I had to install like this:
# make install PREFIX=/
...so it installed to /usr/i386-linux-uclibc.
Another detail: with pts-tcc, I do not have 'upx', so changed these lines in 'pts-tcc-0.9.26-compile.sh':
#BK type -p upx.pts || type -p upx
...
#BK upx.pts --best pts-tcc || upx --best pts-tcc
#BK ./elfosfix.pl pts-tcc pts-tcc.uncompressed
./elfosfix.pl pts-tcc.uncompressed
Thank you for reporting this!
Could you please clarify:
Please note that the last time I run pts-tcc-0.9.26-compile.sh was 6 years ago with gcc-4.4 (if I can remember correctly). Sorry for not making the compilation script more reproducible.
One possible reason for the __rawmemchr
failure can be that the #include
path (gcc -I
) set up by i386-uclibc-gcc.c is incorrect, and at some point gcc is loading the glibc .h files rather than the uclibc .h files, maybe because the gcc -I
flag value generated by i386-uclibc-gcc.c doesn't point to the uclibc headers on your system: changing a string which looks like /usr/include
in i386-uclibc-gcc.c can solve it.
Alternatively, you may want to use pts-xstatic (with gcc) instead of i386-uclibc-gcc.c to compile pts-tcc. pts-xstatic contains a copy of uClibc 0.9.30.1 and it is extra careful in hiding the glibc .h files.
Please note that my the available time for free support of pts-tcc is very limited, but I wish you luck in making it work, and I'd be interested in the results, so please comment on this issue if you have anything to share.
Thank you for reporting this!
FYI I've rewritten https://github.com/pts/pts-tcc/blob/master/pts-tcc-0.9.26-compile.sh to make the compilation more reproducible (now it downloads and uses a specific precompiled uClibc 0.9.30.1 from pts-xstatic. I've also verified that it compiles with gcc-4.8, gcc-6.3 and gcc-7.3 without warnings or errors. I've also added some binary releases, e.g. https://github.com/pts/pts-tcc/releases/tag/v0.9.26-1 .
I'm closing this issue now because the underlying issue (it's hard to recompile pts-tcc-0.9.26) is resolved. Feel free to open a new issue if you encounter compilation problems.
Hi, I am trying to compile pts-tcc, almost get there!
I am using uclibc-ng, the latest from git repo. That's really the only difference. uclibc version 0.9.30.1 would not compile.
When I run 'pts-tcc-0.9.26-compile.sh', it generates 'i386-uclibc-gcc' ok, which works. However, the script stops here:
I can compile a simple "Hello World":
Do you have any thoughts about the cause of the error? '__rawmemchr' is defined in uclibc both 0.9.30.1 and latest uclibc-ng:
...so I don't understand why the error.