PDA

View Full Version : rtmpdump build problem on Mac OS X using GnuTLS


xanadu6291
12-04-2015, 06:27 AM
Hello,

I'm now trying to build rtmpdump under Mac OS X 10.11.1 El Capitan / Xcode 7.1.1 but yet not succeeded.

I'm trying to use GnuTLS for crypto and I'm now thinking this might be succeeded.

But in making rtmpdump, I get "ld: library not found for -lgnutls" error when executing "gcc -Wall -o rtmpdump rtmpdump.o -Llibrtmp -lrtmp -lgnutls -lhogweed -lnettle -lgmp -lz" portion.

My make command and log is as follows:

$ export TARGET ="/Users/roushi/Desktop/RTMPDump_Test"
$ make SYS=darwin CRYPTO=GNUTLS SHARED=no INC=-I${TARGET}/include

gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o rtmp.o rtmp.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o log.o log.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o amf.o amf.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o hashswf.o hashswf.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o parseurl.o parseurl.c
ar rs librtmp.a rtmp.o log.o amf.o hashswf.o parseurl.o
ar: creating archive librtmp.a
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -O2 -c -o rtmpdump.o rtmpdump.c
gcc -Wall -o rtmpdump rtmpdump.o -Llibrtmp -lrtmp -lgnutls -lhogweed -lnettle -lgmp -lz
ld: library not found for -lgnutls
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [rtmpdump] Error 1


I have to pass
INC=-I${TARGET}/include
to let rtmpdump to find out 'gnutls/gnutls.h'

I'd like to use GnuTLS because OS X no longer provide header file of OpenSSL.

Please help me!!

KSV
12-04-2015, 10:31 AM
You should use XCFLAGS to pass the compiler options and XLDFLAGS to pass the linker options. Try adding the following to your make command and it may fix your problem.

XCFLAGS="-I/path/to/gnutls/headers" XLDFLAGS="-L/path/to/libgnutls.a

xanadu6291
12-04-2015, 07:56 PM
KSV-san, Thank you for reply!

I thought that XCFLAGS and XLDFLAGS should be directory. So I tried:


export TARGET ="/Users/roushi/Desktop/RTMPDump_Test"
make SYS=darwin CRYPTO=GNUTLS SHARED= XCFLAGS=-"I${TARGET}/include" XLDFLAGS="-L/${TARGET}/lib"

Then console outputs:
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o rtmp.o rtmp.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o log.o log.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o amf.o amf.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o hashswf.o hashswf.c
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -DUSE_GNUTLS -O2 -c -o parseurl.o parseurl.c
ar rs librtmp.a rtmp.o log.o amf.o hashswf.o parseurl.o
ar: creating archive librtmp.a
gcc -Wall -I/Users/roushi/Desktop/RTMPDump_Test/include -DRTMPDUMP_VERSION=\"v2.4\" -O2 -c -o rtmpdump.o rtmpdump.c
gcc -Wall -L//Users/roushi/Desktop/RTMPDump_Test/lib -o rtmpdump rtmpdump.o -Llibrtmp -lrtmp -lgnutls -lhogweed -lnettle -lgmp -lz
Undefined symbols for architecture x86_64:
"_iconv", referenced from:
__gnutls_ucs2_to_utf8 in libgnutls.a(system.o)
"_iconv_close", referenced from:
__gnutls_ucs2_to_utf8 in libgnutls.a(system.o)
"_iconv_open", referenced from:
__gnutls_ucs2_to_utf8 in libgnutls.a(system.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [rtmpdump] Error 1

Is this error mean I have any fault on building GnuTLS?

xanadu6291
12-04-2015, 10:20 PM
I googled the word "_iconv", referenced from:" and found the answer (http://d.hatena.ne.jp/ytaki43/?of=5). (This page is written in Japanese)

I added "-liconv" to XLDFLAGS. So make statement is:
make SYS=darwin CRYPTO=GNUTLS SHARED= XCFLAGS="-I${TARGET}/include" XLDFLAGS="-L/${TARGET}/lib -liconv"

With this addition, I have succeeded to build rtmpdump with GnuTLS finally!!

Install:
make install prefix=${TARGET} CRYPTO=GNUTLS SHARED=

Hopefully there are someone who teach me how to test rtmpdump with secure connection...

xanadu6291
12-09-2015, 04:42 AM
I added "-liconv" to XLDFLAGS. So make statement is:
make SYS=darwin CRYPTO=GNUTLS SHARED= XCFLAGS="-I${TARGET}/include" XLDFLAGS="-L/${TARGET}/lib -liconv"

If you link gnutls dynamically, you don't need to add "-liconv".
But even in this case, you need "SHARED=" to build rtmpdump correctly.