Gcc linker search path order


 
Thread Tools Search this Thread
Top Forums Programming Gcc linker search path order
# 1  
Old 05-23-2014
Gcc linker search path order

I have a build where I wish to link against and load a specific version of a library and a different version of the same library is installed on the system. I'm using a -L option to point to the version that I wish to link against but gcc still seems to choose the installed version. Is there a way to force gcc to search the directory specified with the -L option before it searches the standard locations?

I'm running Centos 6.5 with gcc 4.4.7. Here are the relevant libs and directories, zlib-devel is not installed
Code:
/lib64/libz.so.1.2.3
/lib64/libz.so.1 -> libz.so.1.2.3
 
/home/richj/product/zlib/lib/libz.so.1.2.8
/home/richj/product/zlib/lib/libz.so -> libz.so.1.2.8
/home/richj/product/zlib/lib/libz.so.1 -> libz.so.1.2.8
/home/richj/product/zlib/include/zlib.h
 
/home/richj/product/foo/libfoo.so
/home/richj/product/foo/foo.h
 
/home/richj/product/bar/bar.c

Main in bar.c calls foo in libfoo.so and foo calls inflateInit in libz Here are the compile commands for libfoo.so and bar. Both the library and the program compile and run without error.
Code:
/usr/bin/gcc -c -fPIC -Wall -g -I../zlib/include foo.c
/usr/bin/gcc -shared -o libfoo.so foo.o
 
/usr/bin/gcc -Wall -g -I../foo -L../foo -lfoo -L../zlib/lib -lz bar.c -o bar
 
$ldd bar
linux-vdso.so.1 => (0x00007fffd67ff000)
libfoo.so => ../foo/libfoo.so
libz.so.1 => /lib64/libz.so.1
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2

So the question is why is it not linking against and loading the version of zlib that I point to in the compile command?

Last edited by Scott; 05-23-2014 at 06:09 PM.. Reason: Please use code tags
# 2  
Old 05-25-2014
On your system does gcc generate 64 bit image code by default? -m64
sets 64 bit. Most systems default to 32 bit - the ones I have anyway.

Suppose you have
Code:
gcc -o ./foo.so foo.c -L/path/to/mylib -fPIC

gcc reads thru objects and library lists from left to right during linking. It uses implicit libraries only after the list is exhausted. So the only reason I can see from what you gave is that gcc thinks it needs to link 32bit. I do not get why you are not getting errors.
# 3  
Old 05-25-2014
Does the runtime linker/loader know about /home/richj/product/zlib/lib/?

Regards,
Alister
# 4  
Old 05-26-2014
That would be:
Code:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/richj/product/zlib/lib

LD_LIBRARY_PATH was generally meant for runtime not compile time - that is up to you with -L. Using an oddball version of a generally standard library is the path to future problems. I would link against the archive (.a) rather than the .so -- if you plan to move it to other boxes.
# 5  
Old 05-26-2014
If, in fact, the problem is that the loader's lookup process is finding the default system library, an alternative to modifying the environment, and to using -L and -l, is to provide an absolute path to the library. If a dependency contains a slash, the loader will not perform a lookup.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Php search path

Probably simple, but I don't see it. jack@veritron /u/email $ cat p3.php <?php require_once './lib/swift_required.php'; $x=get_include_path(); echo "$x \n"; set_include_path('./lib:./lib/classes:'.$x); $x=get_include_path(); echo "$x \n"; $transport =... (1 Reply)
Discussion started by: jgt
1 Replies

2. Programming

Specifying dynamic library path to linker at compile time

I would like to compile a binary that doesnot depend on LD_LIBRARY_PATH as this binary will be setuid to owner and used by other users and since setuid doesnot support LD_LIBRARY_PATH making it independent of LD_LIBRARY_PATH would be great. But I am not able to specify the path of the shared... (1 Reply)
Discussion started by: waavman
1 Replies

3. Programming

gcc linker address

Hai, I have two (Pgm1.c and Pgm2.c) simple programs, which is compiled using gcc. Now we have two exe's (Pgm1 and Pgm2). When i executed the nm Pgm1 and nm Pgm2, in the listed symbols the address of main is same for both programs (08048344 T main) at run time also. Doubt: 1) What is this... (3 Replies)
Discussion started by: rajamohan
3 Replies

4. Programming

GCC: Choose my own linker

Hi, I do not use the default linker, and instead us another one and pass this argument -Wl,--dynamic-linker=<path to linker> to gcc when compiling. However, what happens if the linker is not under /lib and /lib64 and I am not able to create a symlink to the linker in /lib or /lib64 due to no... (2 Replies)
Discussion started by: Shompis
2 Replies

5. Shell Programming and Scripting

grep - search order

Hi, I would like "grep" command to search ALL files in current directory in the order of their modified/created date. How can i do this? e.g., if 3 files contain the pattern i am searching for, i need the output of "grep" to be in the order such that old file search result should come first.... (6 Replies)
Discussion started by: prvnrk
6 Replies

6. Shell Programming and Scripting

PATH dircetory search order

Hello I using CygWin and am working on project that requires whereby after I make some code changes and rebuild I have to manually copy the updated files into the install directory to test them. There is a build output directory where these files placed, but the program will not run from there.... (4 Replies)
Discussion started by: bobban
4 Replies

7. Solaris

gcc & linker question (Solaris 10)

Hi, I'm confused about the GCC & Linking process could somebody please briefly explain? I have GCC 3.4.6 installed from SunFreeware. Reading the narrative alongside the package states "It was compiled to use the SUN assembler and loader usually in /usr/ccs/bin if the SUNW developer packages... (1 Reply)
Discussion started by: Celtic_Monkey
1 Replies

8. Programming

XWindows programming + gcc linker options

Im trying to compile some code that involves using X-Windows based functions (XDisplayName() and XOpenDisplay() ), however each time I run the compiler, Im getting a problem with the linker. The linker says that both XDisplayName() and XOpenDisplay() are unresolved text symbols. Is there a... (1 Reply)
Discussion started by: JamesGoh
1 Replies

9. UNIX for Dummies Questions & Answers

Setting path for GCC?

Dear all, I have downloaded the latest version of gcc --- gcc-3.3.1.tar.gz from gnu.org. My Linux distribution is Mandrake 9.0. This was how I installed it: su - passwrd: mkdir /usr/local/src cd /usr/local/src gunzip /tmp/gcc-3.3.1.tar.gz #where I downloaded the file tar xvf... (2 Replies)
Discussion started by: HOUSCOUS
2 Replies
Login or Register to Ask a Question