diff --git a/src/LinSolveAlgo.jl b/src/LinSolveAlgo.jl
index 1c677c59b410a2afd76b4bc96421f7a6575879a8..0088d6d8b3b426fd3c516586bb1c7c3c8ad6d15b 100644
--- a/src/LinSolveAlgo.jl
+++ b/src/LinSolveAlgo.jl
@@ -2,10 +2,12 @@ module LinSolveAlgo
 
 import Base.strides
 
+const libblastrampoline = "libblastrampoline"
+
 using LinearAlgebra
 import LinearAlgebra.BlasInt
 import LinearAlgebra.BLAS.@blasfunc
-import LinearAlgebra.LAPACK: liblapack, chklapackerror
+import LinearAlgebra.LAPACK:  chklapackerror
 
 export LinSolveWs, linsolve_core!, linsolve_core_no_lu!, lu!
 
@@ -39,7 +41,7 @@ for (getrf, getrs, elty) in
             # ws.lu isn't a view and has continuous storage
             lda = Ref{BlasInt}(max(1,mm))
             info = Ref{BlasInt}(0)
-            ccall((@blasfunc($getrf), liblapack), Cvoid,
+            ccall((@blasfunc($getrf),  libblastrampoline), Cvoid,
                   (Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                    Ptr{BlasInt},Ref{BlasInt}),
                   m, n, ws.lu, lda, ws.ipiv, info)
@@ -72,7 +74,7 @@ for (getrf, getrs, elty) in
                 lda = Ref{BlasInt}(max(1,mm))
                 ldb = Ref{BlasInt}(max(1,stride(b,2)))
                 info = Ref{BlasInt}(0)
-                ccall((@blasfunc($getrs), liblapack), Cvoid,
+                ccall((@blasfunc($getrs),  libblastrampoline), Cvoid,
                       (Ref{UInt8}, Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty},
                        Ref{BlasInt}, Ptr{BlasInt}, Ptr{$elty}, Ref{BlasInt},
                        Ref{BlasInt}),
diff --git a/src/QrAlgo.jl b/src/QrAlgo.jl
index 6d91f3cab3bf64093592186ec11487e374b88f8b..4aca3c83744ed3074eed60910ff06a7807238634 100644
--- a/src/QrAlgo.jl
+++ b/src/QrAlgo.jl
@@ -1,9 +1,11 @@
 module QrAlgo
 
+const libblastrampoline = "libblastrampoline"
+
 using LinearAlgebra
 import LinearAlgebra: BlasInt
 import LinearAlgebra.BLAS: @blasfunc
-import LinearAlgebra.LAPACK: liblapack, chklapackerror
+import LinearAlgebra.LAPACK:  chklapackerror
 
 export QrWs, QrpWs, geqrf_core!, geqp3!, ormqr_core!
 
@@ -33,7 +35,7 @@ for (geqrf, ormqr, elty) in
             work = Vector{T}(undef, 1)
             lwork = Ref{BlasInt}(-1)
             info = Ref{BlasInt}(0)
-            ccall((@blasfunc($geqrf), liblapack), Nothing,
+            ccall((@blasfunc($geqrf),  libblastrampoline), Nothing,
                   (Ref{BlasInt}, Ref{BlasInt}, Ptr{T}, Ref{BlasInt},
                    Ptr{T}, Ptr{T}, Ref{BlasInt}, Ref{BlasInt}),
                   m, n, A, RldA, tau, work, lwork, info)
@@ -48,7 +50,7 @@ for (geqrf, ormqr, elty) in
             m = Ref{BlasInt}(mm)
             n = Ref{BlasInt}(nn)
             RldA = Ref{BlasInt}(max(1,stride(A,2)))
-            ccall((@blasfunc($geqrf), liblapack), Nothing,
+            ccall((@blasfunc($geqrf),  libblastrampoline), Nothing,
                   (Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                    Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}),
                   m,n,A,RldA,ws.tau,ws.work,ws.lwork,ws.info)
@@ -74,7 +76,7 @@ for (geqrf, ormqr, elty) in
             k = Ref{BlasInt}(length(ws.tau))
             RldA = Ref{BlasInt}(max(1,stride(A,2)))
             RldC = Ref{BlasInt}(max(1,stride(C,2)))
-            ccall((@blasfunc($ormqr), liblapack), Nothing,
+            ccall((@blasfunc($ormqr),  libblastrampoline), Nothing,
                   (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                    Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}),
                   side, 'N', m, n, k, A, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info)
@@ -98,7 +100,7 @@ for (geqrf, ormqr, elty) in
                 k = Ref{BlasInt}(length(ws.tau))
                 RldA = Ref{BlasInt}(max(1,stride(A.parent,2)))
                 RldC = Ref{BlasInt}(max(1,stride(C,2)))
-                ccall((@blasfunc($ormqr), liblapack), Nothing,
+                ccall((@blasfunc($ormqr),  libblastrampoline), Nothing,
                       (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                        Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}),
                       side, 'T', m, n, k, A.parent, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info)
@@ -121,7 +123,7 @@ for (geqrf, ormqr, elty) in
             k = Ref{BlasInt}(length(ws.tau))
             RldA = Ref{BlasInt}(max(1,stride(A,2)))
             RldC = Ref{BlasInt}(max(1,stride(C,2)))
-            ccall((@blasfunc($ormqr), liblapack), Nothing,
+            ccall((@blasfunc($ormqr),  libblastrampoline), Nothing,
                   (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                    Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}),
                   side, 'N', m, n, k, A, RldA, ws.tau, C, RldC, ws.work, ws.lwork, ws.info)
@@ -147,7 +149,7 @@ for (geqrf, ormqr, elty) in
                 k = Ref{BlasInt}(length(ws.tau))
                 RldA = Ref{BlasInt}(max(1,stride(A.parent,2)))
                 RldC = Ref{BlasInt}(max(1,stride(C,2)))
-                ccall((@blasfunc($ormqr), liblapack), Nothing,
+                ccall((@blasfunc($ormqr),  libblastrampoline), Nothing,
                       (Ref{UInt8},Ref{UInt8},Ref{BlasInt},Ref{BlasInt},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},
                        Ptr{$elty},Ptr{$elty},Ref{BlasInt},Ptr{$elty},Ref{BlasInt},Ref{BlasInt}),
                       side, $transchar, m, n, k, A.parent, RldA,
@@ -182,7 +184,7 @@ for (geqp3, elty) in
             work = Vector{$elty}(undef, 1)
             lwork = BlasInt(-1)
             info = Ref{BlasInt}()
-            ccall((@blasfunc($geqp3), liblapack), Nothing,
+            ccall((@blasfunc($geqp3),  libblastrampoline), Nothing,
                   (Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty}, Ref{BlasInt},
                    Ptr{BlasInt}, Ptr{$elty}, Ptr{$elty}, Ref{BlasInt}, Ref{BlasInt}),
                   m, n, A, RldA, jpvt, tau, work, lwork, info)
@@ -195,7 +197,7 @@ for (geqp3, elty) in
         function geqp3!(A::StridedMatrix{$elty}, ws::QrpWs)
             m, n = size(A)
             RldA = BlasInt(max(1,stride(A,2)))
-            ccall((@blasfunc($geqp3), liblapack), Nothing,
+            ccall((@blasfunc($geqp3),  libblastrampoline), Nothing,
                   (Ref{BlasInt}, Ref{BlasInt}, Ptr{$elty}, Ref{BlasInt},
                    Ptr{BlasInt}, Ptr{$elty}, Ptr{$elty}, Ref{BlasInt}, Ref{BlasInt}),
                   m, n, A, RldA, ws.jpvt, ws.tau, ws.work, ws.lwork, ws.info)
diff --git a/src/SchurAlgo.jl b/src/SchurAlgo.jl
index a5155b8a30b4c3f31ce0f85a2056b5c7f8f5d5b7..4c7ceb249d66869f40c584ac72095b332010caf4 100644
--- a/src/SchurAlgo.jl
+++ b/src/SchurAlgo.jl
@@ -4,10 +4,12 @@ module SchurAlgo
 
 include("exceptions.jl")
 
+const libblastrampoline = "libblastrampoline"
+
 import LinearAlgebra: USE_BLAS64, LAPACKException
 import LinearAlgebra: BlasInt, BlasFloat, checksquare, chkstride1 
 import LinearAlgebra.BLAS: @blasfunc, libblas
-import LinearAlgebra.LAPACK: liblapack, chklapackerror
+import LinearAlgebra.LAPACK: chklapackerror
 import Base: has_offset_axes
 
 export DgeesWs, dgees!, DggesWs, dgges!
@@ -50,7 +52,7 @@ mutable struct DgeesWs
         RldA = Ref{BlasInt}(max(1,stride(A,2)))
         Rsort = Ref{UInt8}('N')
 #        mycompare_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble}))
-        ccall((@blasfunc(dgees_), liblapack), Nothing,
+        ccall((@blasfunc(dgees_),  libblastrampoline), Nothing,
               (Ref{UInt8}, Ref{UInt8}, Ptr{Nothing},
                Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt},
                Ptr{BlasInt}, Ptr{Float64},
@@ -99,7 +101,7 @@ function dgees!(ws::DgeesWs,A::StridedMatrix{Float64})
     n = Ref{BlasInt}(size(A,1))
     RldA = Ref{BlasInt}(max(1,stride(A,2)))
     myfunc::Function = make_select_function(>=, 1.0)
-    ccall((@blasfunc(dgees_), liblapack), Cvoid,
+    ccall((@blasfunc(dgees_),  libblastrampoline), Cvoid,
           (Ref{UInt8}, Ref{UInt8}, Ptr{Cvoid},
            Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt},
            Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64},
@@ -130,7 +132,7 @@ function dgees!(ws::DgeesWs, A::StridedMatrix{Float64}, op, crit)
     RldA = Ref{BlasInt}(max(1,stride(A,2)))
     myfunc::Function = make_select_function(op, crit)
     mycompare_c = @cfunction($myfunc, Cint, (Ptr{Cdouble}, Ptr{Cdouble}))
-    ccall((@blasfunc(dgees_), liblapack), Cvoid,
+    ccall((@blasfunc(dgees_),  libblastrampoline), Cvoid,
           (Ref{UInt8}, Ref{UInt8}, Ptr{Cvoid},
            Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt},
            Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64},
@@ -175,7 +177,7 @@ mutable struct DggesWs
         sdim = BlasInt(0)
         info = BlasInt(0)
         mycompare_g_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble}, Ptr{Cdouble}))
-        ccall((@blasfunc(dgges_), liblapack), Nothing,
+        ccall((@blasfunc(dgges_),  libblastrampoline), Nothing,
               (Ref{UInt8}, Ref{UInt8}, Ref{UInt8}, Ptr{Nothing},
                Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{Float64},
                Ref{BlasInt}, Ref{BlasInt}, Ptr{Float64}, Ptr{Float64},
@@ -209,7 +211,7 @@ function dgges!(jobvsl::Char, jobvsr::Char, A::StridedMatrix{Float64}, B::Stride
     sdim = Ref{BlasInt}(0)
     info = Ref{BlasInt}(0)
     mycompare_g_c = @cfunction(mycompare, Cint, (Ptr{Cdouble}, Ptr{Cdouble}, Ptr{Cdouble}))
-    ccall((@blasfunc(dgges_), liblapack), Nothing,
+    ccall((@blasfunc(dgges_),  libblastrampoline), Nothing,
           (Ref{UInt8}, Ref{UInt8}, Ref{UInt8}, Ptr{Nothing},
            Ref{BlasInt}, Ptr{Float64}, Ref{BlasInt}, Ptr{Float64},
            Ref{BlasInt}, Ptr{BlasInt}, Ptr{Float64}, Ptr{Float64},