ETQW oddities with glibc 2.15+ [FIX]


(REA987) #41

[QUOTE=you_is_me;570250]So after many many fails and frustration (I actually had to fix the source cause it was not compatible anymore with my system) I’ve compiled glibc 2.23 (32 Bit).
Can you try this one:


Does it work on your LTS System?
(I know its 2.23-4 and not 2.23-0 but I thought higher subversion would be better maybe)[/QUOTE]

I have just tried your latest upload with Mint 18.2 (glibc 2.23), it works just fine. Thank you very much! However, it looks like it is not compatible with Ubuntu Mate 17.10 (glibc 2.26); the game returns segfault without an explanation. It looks like the patch has to be applied on every different glibc version to work… So the builds are not as generic as they supposed to be. Would you prepare a compile guide when you have time?


(you_is_me) #42

First it´s good that it’s working.
Of course I can do a little guide (its actually just around 5 commands in Terminal) but it will only work on Arch linux (I think) because of the difference in distros.


The segfault does make sense (I am new to this stuff too) but while searching (Stackoverflow is my best friend) I found this comment:
(quote): [crash happens] “Because of a mismatch of ld-linux-x86-64.so.2 (man ld.so) and libc.so.”
and another quote “You won’t be able to use custom glibc just by setting the LD_LIBRARY_PATH (e.g. your app will still use dynamic linker from old Glibc)”

I’m gonna research a bit and see if it’s fixable (should be)

Edit:
I found a nice tool which can patch the interpreter. It’s called patchelf and for me it was already preinstalled.
Now I am at this error:


Initializing SDL subsystem
Loading GL driver 'libGL.so.1' through SDL
Desktop resolution: 1920x1080
SDL_ListModes:
1920x1080 1680x1050 1280x1024 1152x864 1024x768 800x600 720x400 640x480 
WARNING: SDL_SetVideoMode failed: Couldn't find matching GLX visual
------- Initializing renderSystem --------
----- R_InitOpenGL -----
signal caught: 'Segmentation fault', si_code 1
callstack:
0x0
[0x082e80e1]
[0x082e549d]
[0xf7fd4ba0]
Trying to exit gracefully..
--------------- BSE Shutdown ----------------
---------------------------------------------
Shutting down SDL subsystem
idRenderSystem::Shutdown()

ETQW is mad. I don´t know why SDL_SetVideoMode failed now happens… My resolution should be right… this error seems to happen to people before on games

Edit: Got it starting! I just copied for testing my complete lib32 folder over my new one without overriding existing files and ETQW starts. Now I need to find out which file he needs…

Edit2: Nevermind… cant replicate it. This SDL error has to do something with the Open Source drivers afaik


(REA987) #43

I am not sure whether it is related but have you changed SDL value in ~/.etqwcl/base/etqwconfig.cfg ?

Default value;

seta r_useSDLModes "0"

My value;

seta r_useSDLModes "1"

(you_is_me) #44

[QUOTE=REA987;570326]I am not sure whether it is related but have you changed SDL value in ~/.etqwcl/base/etqwconfig.cfg ?

Default value;

seta r_useSDLModes "0"

My value;

seta r_useSDLModes "1"

[/QUOTE]

I tried that before (and forcing r_mode) with no luck. As soon as I patch the dynamic linker this error appears.
You can test it youself:

  1. create a dir in your quake folder called mylibs
  2. Copy your complete lib32 folder into this folder (I know a lot files are not needed but this is just for testing)
    2.1 So your path looks like etqwfolder/mylibs/lib32/libc.so.6
  3. Copy your wanted glibc (only lib32 folder needed) into this lib32 folder and override existing files
  4. Patch interpreter and rpath of QuakeWars Binary with patchelf for me it looks like that:

patchelf --set-interpreter /opt/etqw/mylibs/lib32/ld-linux.so.2 /opt/etqw/etqw.x86
patchelf --set-rpath /opt/etqw/mylibs/lib32/ /opt/etqw/etqw.x86

And start Quake Wars.

For me the mentioned Error happens.
You can test it yourself but I think I stop trying because I don’t know what the benefit would be if it get it working that way (because I think there are not a lot Linux Users who still play and need this).

I found a nice post how to (properly) patch a game with patchelf and it’s even quake 4 (so similiar to QW):

Best way: If you just have lib32 files for QW: Uninstall all of them and then try to follow this guide.

Edit: Little guess:
I just found out you can compile SDL with an option called “–disable-rpath” (“option to force an installation that doesn’t contain hardcoded library search paths”)
So… maybe they hardcoded library search paths in their libSDL? Hmm i don’t know…


(REA987) #45

As far as I know ETQW uses a custom libSDL1.2 build which is already problematic: libSDL-1.2.id.so.0 Weirdly enough, when I try to launch the game via etqw-rthread.x86 binary, the game complains about lack of libSDL-1.2.id.so.0 while it’s already there. Even ldd returns the lack of libSDL-1.2.id.so.0 result, but if I try to launch the game via etqw-rthread script, the game launches without an issue. Maybe you should try launch scripts instead of binaries. As I already have 2 functional glibc versions, I won’t bother with testing it anymore. But I may bother you in the future for a new version of glibc if you will be available. :stuck_out_tongue: I sent you a PM. :slight_smile:


(you_is_me) #46

I think only the multi threaded binary (etqw-rthread.x86) use this libSDL version.
Yes, normally it can’t find it.

When you use strace to debug/log what etqw actually does and where it looks for files you get an output like this (this is from “normal” version where I patched rpath):


open("/opt/etqw/mylibs/usr/lib32/tls/i686/sse2/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/tls/i686/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/tls/sse2/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/tls/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/i686/sse2/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/i686/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/sse2/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/etqw/mylibs/usr/lib32/libSDL-1.2.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

It uses different paths to find the needed library and returns -1 if it isn’t found.
The retqw script just uses LD_LIBRARY_PATH to include the current directory into the search and so it will find the library.

If your lazy like me you can copy (with root privileges ofc) the libSDL-1.2.id.so.0 into your normal lib32 direcory and start etqw-rthread.x86 with no error.

And it seems not possible to replace this special SDL version with another (regular) one. I tried to trick it with a Softlink but it won’t start ETQW because of some GL error but I actually never tried much more with it.


(REA987) #47

[QUOTE=you_is_me;570362]If your lazy like me you can copy (with root privileges ofc) the libSDL-1.2.id.so.0 into your normal lib32 direcory and start etqw-rthread.x86 with no error.

And it seems not possible to replace this special SDL version with another (regular) one. I tried to trick it with a Softlink but it won’t start ETQW because of some GL error but I actually never tried much more with it.[/QUOTE]

Wops… I have just reinstalled Ubuntu Mate 17.10 to have the final release, previous installation was beta. The game segfaults with your glibc 2.26 and glibc 2.23 libraries. Segfault infos of each glibc are slightly different. Here are errors and glibc infos:

$ LD_LIBRARY_PATH=/home/rifat/etqw/lib223 LC_ALL=C ./etqw-rthread
Segmentation fault (core dumped)
$ LD_LIBRARY_PATH=/home/rifat/etqw/lib226 LC_ALL=C ./etqw-rthread
      5111:	Segmentation fault (core dumped)
$ LD_LIBRARY_PATH=/home/rifat/etqw/lib223:/home/rifat/etqw ldd etqw-rthread.x86
	linux-gate.so.1 =>  (0xf7f63000)
	libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7f22000)
	libjpeg.so.62 => /usr/lib/i386-linux-gnu/libjpeg.so.62 (0xf7efc000)
	libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7db1000)
	libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf7d9c000)
	libSDL-1.2.id.so.0 => /home/rifat/etqw/libSDL-1.2.id.so.0 (0xf7d3c000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7bb6000)
	libm.so.6 => /home/rifat/etqw/lib223/libm.so.6 (0xf7b64000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7b47000)
	libc.so.6 => /home/rifat/etqw/lib223/libc.so.6 (0xf79d0000)
	libdl.so.2 => /home/rifat/etqw/lib223/libdl.so.2 (0xf79cb000)
	libpthread.so.0 => /home/rifat/etqw/lib223/libpthread.so.0 (0xf79ae000)
	libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf7982000)
	/lib/ld-linux.so.2 (0xf7f65000)
	libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf797e000)
	libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf7977000)
	libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xf795c000)
	librt.so.1 => /home/rifat/etqw/lib223/librt.so.1 (0xf7951000)
$ LD_LIBRARY_PATH=/home/rifat/etqw/lib226:/home/rifat/etqw ldd etqw-rthread.x86
	linux-gate.so.1 =>  (0xf7f18000)
	libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7ed7000)
	libjpeg.so.62 => /usr/lib/i386-linux-gnu/libjpeg.so.62 (0xf7eb1000)
	libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7d66000)
	libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf7d51000)
	libSDL-1.2.id.so.0 => /home/rifat/etqw/libSDL-1.2.id.so.0 (0xf7cf1000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7b6b000)
	libm.so.6 => /home/rifat/etqw/lib226/libm.so.6 (0xf7a79000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7a5c000)
	libc.so.6 => /home/rifat/etqw/lib226/libc.so.6 (0xf78c5000)
	libdl.so.2 => /home/rifat/etqw/lib226/libdl.so.2 (0xf78c0000)
	libpthread.so.0 => /home/rifat/etqw/lib226/libpthread.so.0 (0xf78a1000)
	libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf7875000)
	/lib/ld-linux.so.2 (0xf7f1a000)
	libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf7871000)
	libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf786a000)
	libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xf784f000)
	librt.so.1 => /home/rifat/etqw/lib226/librt.so.1 (0xf7844000)
$ sudo apt-cache show libc6
Package: libc6
Architecture: amd64
Version: 2.26-0ubuntu2
Multi-Arch: same
Priority: required
Section: libs
Source: glibc
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11389
Depends: libgcc1
Suggests: glibc-doc, debconf | debconf-2.0, locales
Breaks: hurd (<< 1:0.5.git20140203-1), libtirpc1 (<< 0.2.3), locales (<< 2.26), locales-all (<< 2.26), nscd (<< 2.26)
Replaces: libc6-amd64
Filename: pool/main/g/glibc/libc6_2.26-0ubuntu2_amd64.deb
Size: 2777762
MD5sum: f33ebbfb177b9e072fec0ab07d480dbe
SHA1: 2887712cd26956310e65a1a481ea0007bb87f505
SHA256: d42d424e72a9059bd00a89445d1af319caa4aee5eaf8f80636b2b3117ea475b3
Homepage: http://www.gnu.org/software/libc/libc.html
Description-en: GNU C Library: Shared libraries
 Contains the standard libraries that are used by nearly all programs on
 the system. This package includes shared versions of the standard C library
 and the standard math library, as well as many others.
Description-md5: fc3001b0b90a1c8e6690b283a619d57f
Task: minimal
Supported: 9m
$ LC_ALL=C ldd --version
ldd (Ubuntu GLIBC 2.26-0ubuntu2) 2.26
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
$ /lib32/libc.so.6
GNU C Library (Ubuntu GLIBC 2.26-0ubuntu2) stable release version 2.26, by Roland McGrath et al.
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 6.4.0 20171010.
Available extensions:
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.
Kernel Linux 4.13.0-17-generic x86_64

Any ideas? :orbital:

Edit: As I have just tried with Ubuntu Mate 17.10 Beta, your glibc 2.26 still works fine. After taking some notes, I updated the system which resulted glibc update as well; now your glibc 2.26 segfaults with the game. As I compared the notes, it looks like Ubuntu Mate 17.10 Beta had 2.26-0ubuntu1 while up-to-date Ubuntu Mate 17.10 uses 2.26-0ubuntu2. Can you please teach me how to compile a generic glibc, so I won’t bother you for every minor release? Thank you!

$ sudo apt-cache show libc6
Package: libc6
Architecture: amd64
Version: 2.26-0ubuntu2
Multi-Arch: same
Priority: required
Section: libs
Source: glibc
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11389
Depends: libgcc1
Suggests: glibc-doc, debconf | debconf-2.0, locales
Breaks: hurd (<< 1:0.5.git20140203-1), libtirpc1 (<< 0.2.3), locales (<< 2.26), locales-all (<< 2.26), nscd (<< 2.26)
Replaces: libc6-amd64
Filename: pool/main/g/glibc/libc6_2.26-0ubuntu2_amd64.deb
Size: 2777762
MD5sum: f33ebbfb177b9e072fec0ab07d480dbe
SHA1: 2887712cd26956310e65a1a481ea0007bb87f505
SHA256: d42d424e72a9059bd00a89445d1af319caa4aee5eaf8f80636b2b3117ea475b3
Homepage: http://www.gnu.org/software/libc/libc.html
Description-en: GNU C Library: Shared libraries
 Contains the standard libraries that are used by nearly all programs on
 the system. This package includes shared versions of the standard C library
 and the standard math library, as well as many others.
Description-md5: fc3001b0b90a1c8e6690b283a619d57f
Task: minimal
Supported: 9m

Package: libc6
Status: install ok installed
Priority: required
Section: libs
Installed-Size: 11388
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: same
Source: glibc
Version: 2.26-0ubuntu1
Replaces: libc6-amd64
Depends: libgcc1
Suggests: glibc-doc, debconf | debconf-2.0, locales
Breaks: hurd (<< 1:0.5.git20140203-1), libtirpc1 (<< 0.2.3), locales (<< 2.26), locales-all (<< 2.26), nscd (<< 2.26)
Conffiles:
 /etc/ld.so.conf.d/x86_64-linux-gnu.conf 593ad12389ab2b6f952e7ede67b8fbbf
Description-en: GNU C Library: Shared libraries
 Contains the standard libraries that are used by nearly all programs on
 the system. This package includes shared versions of the standard C library
 and the standard math library, as well as many others.
Description-md5: fc3001b0b90a1c8e6690b283a619d57f
Homepage: http://www.gnu.org/software/libc/libc.html
Original-Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
$ LC_ALL=C ldd --version
ldd (Ubuntu GLIBC 2.26-0ubuntu1) 2.26
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
$ /lib32/libc.so.6
GNU C Library (Ubuntu GLIBC 2.26-0ubuntu1) stable release version 2.26, by Roland McGrath et al.
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 6.4.0 20170820.
Available extensions:
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.

(you_is_me) #48

I don’t know how to compile programms using Ubuntu. Arch uses pacman which is way different and I used the way described by JinxterX and the Arch Wiki.
This way: https://wiki.archlinux.org/index.php/Arch_Build_System

Here is how I did it on Arch:
[0] Install Subversion (aka SVN) (and edit your flags (makepkg.conf if you want but not needed)
[1] Create a folder let’s call it glibc
[2] Open terminal inside this folder and type “svn checkout --depth=empty svn://svn.archlinux.org/community”
[3] Switch into the new folder by typing “cd community”
[4] Check out lib32-glibc by typing “svn update lib32-glibc”
[4.1] If you want check out an older lib32-glibc Version (and not the latest) you need to find its revision number by typing “svn log lib32-glibc” (I would suggest piping it into a txt file so it is more easy to read, so “svn log lib32-glibc > rev.txt”. If you found the correct version type “svn update -REVISION lib32-glibc” where REVISION is the number you found out from the txt file
[5] Switch into the folder where the PKGBUILD is with “cd lib32-glibc/trunk”
[6] Edit the PKGBULD (I prefer Nano) with “nano PKGBUILD” and edit enable-multi-arch to disable-multi-arch and save (CTRL +O)
[7] Type makepkg to start downloading source and building


As I said this won’t work on Ubuntu (you don’t have makepkg), you will need the source files from the Ubuntu repo. I am sure there are many tutorials for this.


(you_is_me) #49

(Double post but it’s something different and important)

I think I found a fix for the Segfault when switching Servers!
I installed a tool called “driconf” (I know it’s old) and since then ETQW doesn’t crash when changing servers!!! When uninstalled the crash appeared again. It doesn’t need any configuration (I think), for me the crashes are gone!
ETQW is now 100% working :slight_smile:


(REA987) #50

[QUOTE=you_is_me;570553](Double post but it’s something different and important)

I think I found a fix for the Segfault when switching Servers!
I installed a tool called “driconf” (I know it’s old) and since then ETQW doesn’t crash when changing servers!!! When uninstalled the crash appeared again. It doesn’t need any configuration (I think), for me the crashes are gone!
ETQW is now 100% working :)[/QUOTE]

Huh? :slight_smile: How did you use DriConf and most importantly with which GPU? I installed following package;
https://packages.ubuntu.com/artful/driconf

debian.net screenshot:
https://screenshots.debian.net/package/driconf

When my laptop’s Intel GPU with Mesa drivers enabled, I can launch DriConf via /usr/bin/driconf. But when Nvidia GPU with proprietary drivers (387.34 atm) enabled, it gives

XDriInfo returned with non-zero exit code.

and

libGL is too old.

errors. Usage of LD_LIBRARY_PATH=/usr/lib32/nvidia-387 driconf, LD_LIBRARY_PATH=/usr/lib/nvidia-387 driconf, LD_PRELOAD=/usr/lib32/nvidia-387/libGL.so driconf, LD_PRELOAD=/usr/lib/nvidia-387/libGL.so driconf makes no difference.

Besides, how did you use that tool? It looks like it has some game settings; do you launch it with the game? As you might aware ETQW doesn’t crash/screen lock all the time; wait in the server menu without connecting any server for 5 minutes; then try to connect to a server, let’s see if it will crash/screenlock.


(REA987) #51

[QUOTE=you_is_me;570553](Double post but it’s something different and important)

I think I found a fix for the Segfault when switching Servers!
I installed a tool called “driconf” (I know it’s old) and since then ETQW doesn’t crash when changing servers!!! When uninstalled the crash appeared again. It doesn’t need any configuration (I think), for me the crashes are gone!
ETQW is now 100% working :)[/QUOTE]

The freeze/crash problem seems to be related with libgcc, is it possible to compile libgcc (libgcc_s.so.1) with “–disable-multi-arch”?

https://bbs.archlinux.org/viewtopic.php?pid=1051890#p1051890


(you_is_me) #52

[QUOTE=REA987;572314]The freeze/crash problem seems to be related with libgcc, is it possible to compile libgcc (libgcc_s.so.1) with “–disable-multi-arch”?

https://bbs.archlinux.org/viewtopic.php?pid=1051890#p1051890[/QUOTE]

This file is found in lib32-gcc-libs which it’s base package is gcc. I tried to compile it but after 4hours(…) it stopped with an error. It takes a long time and I am not sure what caused the error.


(REA987) #53

It looks like only way to get rid of segmentation fault and missing letter issues is to repackage the game in a self-contained environment with old dependencies. I’ll try that but don’t know when. Thanks for trying. :slight_smile:


(you_is_me) #54

Wish you good luck. My best try so far was with patchelf but as I said at some point I couldn’t get further. I may try again when I have some time but I am happy with the fixed letter so far.


(you_is_me) #55

So the latest glibc caused many problems (Segfaults) for Arch Linux Users. Reading on Reddit I saw someone suggesting patchelf to make a programm use an old glibc. Maybe i’ve done it wrong, would be nice if someone has time and try it with his instructions.

To Quote:

Of course this needs to be adapted to lib32 glibc.
If I get time I may try it.


(you_is_me) #56

Sorry for posting twice but… IT WORKS!
(I grabbed the latest lib32 glibc from the ARCH Repos and after patching and starting ETQW I had the missing letter again)
So REA, please try it yourself :slight_smile:

Edit: Small info from the quote: It’s ld-linux.so.2 for us.

The command I used:
patchelf --set-interpreter /opt/etqw/glibPATCH/usr/lib32/ld-linux.so.2 --set-rpath $ORIGIN:$ORIGIN/lib32/:/opt/etqw/glibPATCH/usr/lib32/ /opt/etqw/etqw-rthread.x86