forked from OSchip/llvm-project
Fix library search order.
Previously, we searched for a .so file from all library paths and then searched for a .a file. That logic is wrong. What we need to do is to look for a .so and a .a for each library path. llvm-svn: 273846
This commit is contained in:
parent
7357849dca
commit
20d8d55b05
|
@ -244,12 +244,17 @@ std::string elf::findFromSearchPaths(StringRef Path) {
|
|||
std::string elf::searchLibrary(StringRef Path) {
|
||||
if (Path.startswith(":"))
|
||||
return findFromSearchPaths(Path.substr(1));
|
||||
if (!Config->Static) {
|
||||
std::string S = findFromSearchPaths(("lib" + Path + ".so").str());
|
||||
if (!S.empty())
|
||||
for (StringRef Dir : Config->SearchPaths) {
|
||||
if (!Config->Static) {
|
||||
std::string S = buildSysrootedPath(Dir, ("lib" + Path + ".so").str());
|
||||
if (fs::exists(S))
|
||||
return S;
|
||||
}
|
||||
std::string S = buildSysrootedPath(Dir, ("lib" + Path + ".a").str());
|
||||
if (fs::exists(S))
|
||||
return S;
|
||||
}
|
||||
return findFromSearchPaths(("lib" + Path + ".a").str());
|
||||
return "";
|
||||
}
|
||||
|
||||
// Makes a path by concatenating Dir and File.
|
||||
|
|
|
@ -44,6 +44,12 @@
|
|||
// RUN: ld.lld -o %t3 %t.o -L%t.dir -lls
|
||||
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
|
||||
|
||||
// Check for library search order
|
||||
// RUN: mkdir -p %t.dir2
|
||||
// RUN: cp %t.dir/libls.a %t.dir2
|
||||
// RUN: ld.lld -o %t3 %t.o -L%t.dir2 -L%t.dir -lls
|
||||
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
|
||||
|
||||
// -L can be placed after -l
|
||||
// RUN: ld.lld -o %t3 %t.o -lls -L%t.dir
|
||||
|
||||
|
|
Loading…
Reference in New Issue