On 5/18/2016 1:29 PM, Alex Potapenko wrote:
Yes, I'm compiling natively. Optware-ng provides gcc for native
compilation. /opt/bin/gcc is a wrapper around /opt/bin/gcc.real -- the
actual compiler:
I believe this is an issue with binutils rather than with uclibc-ng
itself. To fix this, binutils needs to be compiled with
"--sysroot=/opt" (not there) . Using --prefix is not enough in this
case, binutils needs to know the location of the shared files it should
be linking against. /opt is a non-standard location after all for a
system root. Without sysroot, it attempts to reference the libraries
provided by your device's firmware in /lib, which it definitely should
not be doing. uclibc provided by the router probably doesn't have
atexit, and thus the error. Some things may still compile, and they
*will* use the libraries in /opt, since the wrapper script (feels dirty
to me) provides the dynamic linker and rpath arguments, but you'll be
limited to symbols that the router's libraries have. I came upon
similar issues in my project Tomatoware.
And now to shamelessly promote you my project Tomatoware. (despite it's
name, it also runs on dd-wrt and rmerlin as well as tomato)
Entware-ng/Optware-ng are firstly and primarily package repos, with gcc
and a handful of dev tools thrown in as an afterthought. Tomatoware on
the other hand is designed with the sole purpose of providing a
development environment on mipsel/arm routers. It also allows static
linking which I find absolutely essential for binary re-share-ability.
Entware-ng/Optware-ng only allow dynamic linking, so your binary is
tethered to Entware-ng/Optware-ng being installed. Tomatoware deploys
to /mmc, so you can still use Entware-ng/Optware-ng for installing packages.
http://www.linksysinfo.org/index.php?threads/tomatoware.69742/
Cheers,
Lance