55a4e89b3b
Some libraries are layered can depend on other libraries on a private paths. That is, libA can depend on libB which is neither on the LD_LIBRARY_PATH nor on a known system path. The posix linker injects "variables" such as @rpath which is expanded at link time to resolve the libraries on a relative path. Prior to this patch, cling's Dyld-based symbol resolution could not trace down such cases causing failures in symbol resolution when a symbol is only defined in libB (a private library). This patch implements the basic posix linker substitutions allowing cling's Dyld-based symbol resolution implementation to follow more closely the linker rules. Kudos Alexander Penev (@alexander-penev).
28 lines
1.1 KiB
C
28 lines
1.1 KiB
C
//------------------------------------------------------------------------------
|
|
// CLING - the C++ LLVM-based InterpreterG :)
|
|
//
|
|
// This file is dual-licensed: you can choose to license it under the University
|
|
// of Illinois Open Source License or the GNU Lesser General Public License. See
|
|
// LICENSE.TXT for details.
|
|
//------------------------------------------------------------------------------
|
|
|
|
// RUN: mkdir -p %t-dir/lib
|
|
// RUN: %clang -shared -DCLING_EXPORT=%dllexport %S/call_lib.c -o%t-dir/lib/libcall_lib%shlibext
|
|
// RUN: cat %s | %cling -L %t-dir/lib 2>&1 | FileCheck %s
|
|
|
|
// Test: Cling pragma for loading libraries. Cling shows error when library
|
|
// do not exists (do not reacheble via library PATH.
|
|
|
|
#pragma cling load("DoesNotExistPleaseRecover")
|
|
// expected-error@input_line_13:1{{'DoesNotExistPleaseRecover' file not found}}
|
|
|
|
// Test: Cling pragma for loading libraries. Lookup and load library call_lib.
|
|
// Lookup functions from libraries and use them to print result value.
|
|
|
|
#pragma cling load("libcall_lib")
|
|
extern "C" int cling_testlibrary_function();
|
|
cling_testlibrary_function()
|
|
// CHECK: (int) 42
|
|
|
|
.q
|