PDA

View Full Version : Problem compiling 64-bit version with Linux.


bat999
10-27-2016, 02:01 AM
Hi
The 32-bit version of RTMPDump always compiled for me OK.
But now I have a problem compiling RTMPDump 64-bit.
$ cat /etc/issue
Linux Mint 18 Sarah \n \l

I download the git...
git clone --depth 1 git://repo.or.cz/rtmpdump.git

And apply the patch...
$ cp Patch.diff ~/rtmpdump/Patch.diff; cd rtmpdump; patch -p0 -i Patch.diff

....
Hunk #54 succeeded at 5266 (offset 2 lines).
Hunk #55 succeeded at 5675 (offset 2 lines).
Hunk #56 succeeded at 5878 (offset 2 lines).
patching file librtmp/rtmp.h
patching file librtmp/rtmp_sys.h
patching file rtmpdump.c
patching file rtmpgw.c
patching file rtmpsrv.c
patching file rtmpsuck.c
patching file thread.c


Then make...
$ make SHARED= VERSION="v2.4\ KSV-2015-12-14"


But when I try to install it there are errors...

$ make install
make[1]: Entering directory '/home/user/rtmpdump/librtmp'
gcc -shared -Wl,-soname,librtmp.so.1 -o librtmp.so.1 rtmp.o log.o amf.o hashswf.o parseurl.o -lssl -lcrypto -lz -lm
/usr/bin/ld: rtmp.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
rtmp.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:92: recipe for target 'librtmp.so.1' failed
make[1]: *** [librtmp.so.1] Error 1
make[1]: Leaving directory '/home/user/rtmpdump/librtmp'
Makefile:76: recipe for target 'librtmp/librtmp.a' failed
make: *** [librtmp/librtmp.a] Error 2

It seems that I have to pass some information about "fPIC" to the compiler.
How do I do this?

bat999
10-29-2016, 01:05 AM
Hi
It compiles OK if I don't use "SHARED=" in the make command.

$ make VERSION="v2.4\ KSV-2015-12-14"

Installing with make install...

========================= Installation results ===========================
make[1]: Entering directory '/home/user/rtmpdump/librtmp'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/user/rtmpdump/librtmp'
mkdir -p /usr/local/bin /usr/local/sbin /usr/local/man/man1 /usr/local/man/man8
cp rtmpdump /usr/local/bin
cp rtmpgw rtmpsrv rtmpsuck /usr/local/sbin
cp rtmpdump.1 /usr/local/man/man1
cp rtmpgw.8 /usr/local/man/man8
make[1]: Entering directory '/home/user/rtmpdump/librtmp'
sed -e "s;@prefix@;/usr/local;" -e "s;@libdir@;/usr/local/lib;" \
-e "s;@VERSION@;v2.4;" \
-e "s;@CRYPTO_REQ@;libssl,libcrypto;" \
-e "s;@PUBLIC_LIBS@;;" \
-e "s;@PRIVATE_LIBS@;-lm;" librtmp.pc.in > librtmp.pc
mkdir -p /usr/local/include/librtmp /usr/local/lib/pkgconfig /usr/local/man/man3 /usr/local/lib
cp amf.h http.h log.h rtmp.h /usr/local/include/librtmp
cp librtmp.a /usr/local/lib
cp librtmp.pc /usr/local/lib/pkgconfig
cp librtmp.3 /usr/local/man/man3
cp librtmp.so.1 /usr/local/lib
cd /usr/local/lib; ln -sf librtmp.so.1 librtmp.so
make[1]: Leaving directory '/home/user/rtmpdump/librtmp'

======================== Installation successful ==========================

$ rtmpdump
RTMPDump v2.4 KSV-2015-12-14