From owner-freebsd-ports@FreeBSD.ORG Fri Jan 31 17:31:17 2014 Return-Path: Delivered-To: freebsd-ports@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 8B70564B for ; Fri, 31 Jan 2014 17:31:17 +0000 (UTC) Received: from wilberforce.math.missouri.edu (wilberforce.math.missouri.edu [128.206.184.213]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 51C6416DE for ; Fri, 31 Jan 2014 17:31:17 +0000 (UTC) Received: from [128.206.184.213] (wilberforce.math.missouri.edu [128.206.184.213]) by wilberforce.math.missouri.edu (8.14.7/8.14.7) with ESMTP id s0VHV8aJ044406; Fri, 31 Jan 2014 11:31:09 -0600 (CST) (envelope-from stephen@missouri.edu) Message-ID: <52EBDDDC.7000702@missouri.edu> Date: Fri, 31 Jan 2014 11:31:08 -0600 From: Stephen Montgomery-Smith User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Konstantin Belousov Subject: Re: Problems with linking on FreeBSD-10 References: <52EAEC1D.9040502@missouri.edu> <20140131132504.GZ24664@kib.kiev.ua> In-Reply-To: <20140131132504.GZ24664@kib.kiev.ua> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: FreeBSD Ports X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Jan 2014 17:31:17 -0000 On 01/31/14 07:25, Konstantin Belousov wrote: > On Fri, Jan 31, 2014 at 12:19:46AM +0000, Montgomery-Smith, Stephen wrote: >> I maintain the port math/sage. The port builds its own version of the >> libreadline library. The port also uses lang/gcc instead of clang, >> because the port needs Fortran. >> >> The port is wanting to create a shared library called libR.so, which it >> wants to link with the libreadline library it created itself. So it >> issues this kind of command: >> >> gcc46 -Wl,-rpath=path-of-newly-made-library -o libR.so -lreadline >> >> I have left out most of the command for brevity. > Not for brevity, but to make the diagnostic impossible. > Here are more details. I have the -L there as well. It creates libR.so using a command like this: cc -std=gnu99 -shared -fopenmp -L/usr/home/stephen/sage/work/sage-6.0/local/lib/ -Wl,-rpath=/usr/home/stephen/sage/work/sage-6.0/local/lib -Wl,-rpath=/usr/local/lib/gcc46 -L/usr/local/lib/gcc46 -o libR.so CommandLineArgs.o Rdynload.o Renviron.o RNG.o agrep.o apply.o arithmetic.o array.o attrib.o bind.o builtin.o character.o coerce.o colors.o complex.o connections.o context.o cum.o dcf.o datetime.o debug.o deparse.o devices.o dotcode.o dounzip.o dstruct.o duplicate.o edit.o engine.o envir.o errors.o eval.o format.o gevents.o gram.o gram-ex.o graphics.o grep.o identical.o inlined.o inspect.o internet.o iosupport.o lapack.o list.o localecharset.o logic.o main.o mapply.o match.o memory.o names.o objects.o options.o paste.o platform.o plot.o plot3d.o plotmath.o print.o printarray.o printvector.o printutils.o qsort.o random.o raw.o registration.o relop.o rlocale.o saveload.o scan.o seq.o serialize.o sort.o source.o split.o sprintf.o startup.o subassign.o subscript.o subset.o summary.o sysutils.o unique.o util.o version.o vfonts.o xxxpr.o `ls ../unix/*.o ../appl/*.o ../nmath/*.o` ../extra/zlib/libz.a ../extra/bzip2/libbz2.a ../extra/pcre/libpcre.a ../extra/tre/libtre.a -L/usr/home/stephen/sage/work/sage-6.0/local/lib -lf77blas -latlas -lgfortran -lm -lquadmath -lintl -lreadline -llzma -lrt -lm -liconv Now -Wl,-rpath is set, so it should find libreadline in /usr/home/stephen/sage/work/sage-6.0/local/lib. But instead it finds libreadline in /lib. So later when it does the following compilation to build R.bin: gcc -std=gnu99 -export-dynamic -fopenmp -L/usr/home/stephen/sage/work/sage-6.0/local/lib/ -Wl,-rpath=/usr/home/stephen/sage/work/sage-6.0/local/lib -Wl,-rpath=/usr/local/lib/gcc46 -L/usr/local/lib/gcc46 -o R.bin Rmain.o -L../../lib -lR ...it comes up with an error saying that rl_sort_completion_matches isn't found. And when I do an ldd or "readelf -d" on libR.so, I can see that it is trying to link to the wrong libreadline, and rl_sort_completion_matches is only defined in the other libreadline. >> >> Unfortunately the libR.so pulls in /lib/libreadline - the version that >> comes with the base FreeBSD. I thought that -rpath flag was supposed to >> tell the linker where to find the library. But it doesn't. > Show exact commands and exact error message. It is not possible to > understand from you message is the failure at the static linking (ld(1)) > or dynamic (at the program startup) stage. > > Just in case this might be useful: > - -rpath only affects runtime search path > - ld(1) search for libraries is directed with the -L option. > >> >> The failure is when using FreeBSD-10. With FreeBSD-8 it works great. I >> also assume that gcc46 uses /usr/local/bin/ld instead of /usr/bin/ld, >> since devel/binutils is a dependency of lang/gcc. >> >> Can anyone help me? Is this a bug with FreeBSD? Or is there some extra >> flag I can set with the linker to make it work? I have tried >> -rpath-link and -z origin, but these were random guesses. and I don't >> really know what I am doing. >> >> Thanks, Stephen >> >> _______________________________________________ >> freebsd-ports@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-ports >> To unsubscribe, send any mail to "freebsd-ports-unsubscribe@freebsd.org"