After I set the compiler flag, I get the following compilation error:
Building file: /home/Projects/Cache.cpp
Invoking: GCC C++ Compiler
g++ -I"/home/Projects/include" -O0 -g3 -Wall -c -fmessage-length=0
-Wno-pragmas -m64 -fPIC -R"/usr/local/lib" -MMD -MP -MF"Cache.d"
-MT"Cache.d" -o"Cache.o" "/home/Projects/Cache.cpp"
g++: unrecognized option '-R/usr/local/lib'
(Whether there is a space between -R and /usr/local/lib does not matter,
they all produce the error.)
If I use that flag for the linker, I get a different linker error:
Building target: libC.so
Invoking: GCC C++ Linker
g++ -L"/home/alexchen/Projects/lib" -R/usr/local/lib -shared
-o"libC.so" ./Disk.o ./Cache.o -luuid -latomic_ops
g++: unrecognized option '-R/usr/local/lib'
Finished building target: libC.so
By the way, I am using Eclipse C++ plug-in so the flag is set via the
project's compiler/linker 'Miscellaneous' setting.
On 4/16/2011 8:54 PM, Alex Chen wrote:
Thanks for the information, Dr. Kirby.
Is that -R flag for the compiler or the linker?
I thought the linker's -L flag will tell it to look for libraries there. I
guess it does not embed the path in the final library file.
The issue is that the run time linker does not know to look in
/usr/local/lib for
libraries, so unless the path is hard-coded into the executable, the
libraries
will not be found.
Some programs are compiled in such a way they automatically look in
/usr/local/lib. You should find that by recompiling all your sources with
the
compiler flag "-R /usr/local/lib" will work.
Setting
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
will probably "solve" your problem, in that your code will probably find
the
libraries. But it's not a very good solution.
You can change the places the run time linker looks for libraries. You
could
make it always look in /usr/local/lib, but such a change is a bad idea
IMHO.
Dave