I'm having extreme difficulties getting this Open-source ARJ archiver to compile on a modern day system. I'm running OpenSuSE 13.2 64-bit (x86_64). I've ran autogen in the GNU directory, I've followed the instructions. At first the system errors out about not knowing how to deal with my system (x86_64-pc). I modify config.sub to tell it to treat my system like a 32-bit system. Then it errors out about strnlen being redefined. So I modify fardata.c and rename the strnlen function to strnlen2 and then I do a #define strnlen strnlen2 so anytime the strnlen function gets called, it's actually calling the strnlen2 function. This gets it to compile further but then errors out with the following:
./pc-linux-gnuoldld/en/rs/arjsfxv/garble.o: In function arjcrypt_init':
/home/spork/src/arj-3.10.22/garble.c:179: undefined reference todlopen'
/home/spork/src/arj-3.10.22/garble.c:186: undefined reference to `dlsym'
collect2: error: ld returned 1 exit status
GNUmakefile:287: recipe for target 'pc-linux-gnuoldld/en/rs/arjsfxv/arjsfxv' failed
make[1]: *** [pc-linux-gnuoldld/en/rs/arjsfxv/arjsfxv] Error 1
make[1]: Leaving directory '/home/spork/src/arj-3.10.22'
GNUmakefile:169: recipe for target 'all' failed
make: *** [all] Error 2
I believe dlopen and dlsym are functions that deal with DLLs on a Windows system. I might be wrong though. Any help would greatly be appreciated. Thank you.
I was wrong about the dlsys and dlopen. They are available in Linux. To get past that error, I had to modify GNUMakefile and add -ldl to the LIBS = variable like so:
LIBS = -ldl
The program still failed to compile. It did create an arj executable though but it does not run right at all. If I try executing just the arj file, it says CRC error. If I try --help, -help, -h, --h, --?, -?, or /? it errors out saying invalid switch.