KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm having problems with LD_LIBRARY_PATH at link time (this question has nothing to do with run time). The link line looks like this when I run make (this is a Linux system using g++ version 4.1.x): g++ a.o b.o c.o -o myapp \ -L/long/path/to/libs/ \ -L/another/long/path/ \ -labc -ldef -lghi The -l options reference shared libraries (e.g., libabc.so) which exist in the directories specified by the -L options. Those directories also appear in LD_LIBRARY_PATH . With that configuration, the link is successful, and I can run the application. If I remove the directories from LD_LIBRARY_PATH , then I get a single error line such as: /usr/bin/ld: cannot find -labc On the other hand, if I remove the directories from the list of -L options, then I get many warnings such as: /usr/bin/ld: warning: libabc.so, needed by /long/path/to/libs/libxyz.so, not found (try using -rpath or -rpath-link) and then many more errors, such as: /long/path/to/libs/libdef.so: undefined reference to `Foo::Bar<Baz>::junk(Fred*)' Can someone explain the difference between LD_LIBRARY_PATH and -L ? I would like to understand this stuff in depth, so references are greatly appreciated! Also, what do I have to add to the link line to avoid using LD_LIBRARY_PATH ? EDIT: When directories were missing from -L , the compiler suggested to "try using -rpath or -rpath-link". I don't think I've ever seen those options in a makefile before. Have you? Not sure if that would help the LD_LIBRARY_PATH problem though.
Tags (comma-separated)
Save Edits
Cancel