Guten tag Rony

> It seems that at least with macOS Big Sur (version 11.4) DYLD_LIBRARY_PATH 
> does not work anymore (for "security reasons")
> 

Well, when this variable is not deleted by the system, it works as expected.
But ok, the point here is to work without this variable.

>> If I put libBSF4ooRexx.dylib in the lib folder of oorexx then it works 
>> (RPATH).
> Tried it on 11.4, but unfortunately does not work. It may have to do with  
> 

Indeed, it worked for me because I had the path to libjvm.dylib in 
DYLD_LIBRARY_PATH

By the way, you could check if DYLD_LIBRARY_PATH works with your system, when 
not deleted… Remove the symbolic link you created in oorexx lib, and try

DYLD_LIBRARY_PATH=“directory of ibjvm” rexx -e “call bfs.cls"

> This is strange as BSF4ooRexx explicitly looks in different locations for 
> libjvm.dylib and is not compiled with rpath in effect.
> 
If I understand correctly, you load dynamically libjvm using dlopen.
In this case, is it possible to remove completely the dependency on libjvm when 
linking ?



> On 18 Jul 2021, at 15:11, Rony G. Flatscher <rony.flatsc...@wu.ac.at> wrote:
> 
> Bonjour Jean-Louis,
> On 18.07.2021 00:02, Jean Louis Faucher wrote:
>> I have an atypical configuration where I use DYLD_LIBRARY_PATH to locate the 
>> BSF4OORexx library.
>> This is because I don’t “install” BSF4OORexx, I just unzip the delivery, 
>> copy and rename the libraries to bsf4oorex/install/64
>> With this configuration, your test cases are working (not saying this is the 
>> solution).
> It seems that at least with macOS Big Sur (version 11.4) DYLD_LIBRARY_PATH 
> does not work anymore (for "security reasons"), as well as anything not 
> rooted on the Mac computer gets quarantined (got the same problem as with 
> ooRexx and BSF4ooRexx from the Internet when I installed OpenOffice 4.1.10 
> yesterday), so one needs to remove the com.apple.quarantine extended 
> attribute with xattr before the packages become operable again. (Personally, 
> I think that it is high time that someone has to stop Apple to deprive the 
> owners of Apple computers and also the Apple software developers.)
> 
> Cf. e.g. <https://developer.apple.com/forums/thread/13161> 
> <https://developer.apple.com/forums/thread/13161> at the bottom where 
> LD_LIBRARY_PATH and anything starting with DYLD_LIBRARY_PATH gets ignored all 
> of a sudden, also 
> <https://stackoverflow.com/questions/60126159/how-to-set-ld-library-path-dyld-library-path-on-macos>
>  
> <https://stackoverflow.com/questions/60126159/how-to-set-ld-library-path-dyld-library-path-on-macos>
>  at the bottom. Some background here: 
> <https://news.ycombinator.com/item?id=23612772> 
> <https://news.ycombinator.com/item?id=23612772>, here the authorative 
> description: 
> <https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/RuntimeProtections/RuntimeProtections.html>
>  
> <https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/RuntimeProtections/RuntimeProtections.html>.
>  
> [A few months ago I read that if one would run a copy of the shell program 
> from the user location then it would work. Tried it, but  could not get it to 
> work.]
>> If I don’t set DYLD_LIBRARY_PATH, I get the same error than yours.
>> 
>> I compared the output of the next command in both cases
>> DYLD_PRINT_LIBRARIES="1" DYLD_PRINT_APIS="1" rexx -e "call bsf.cls”
>> 
>> In the working session:
>> dlopen(librexxapi.dylib, 0x00000001)
>>   dlopen(librexxapi.dylib) ==> 0x10936da50
>> dlopen(libBSF4ooRexx.dylib, 0x00000001)
>> dyld: loaded: 
>> /local/rexx/bsf4oorexx/BSF4ooRexx_install_v641-20210715-beta/bsf4oorexx/install/64/libBSF4ooRexx.dylib
>> dyld: loaded: 
>> /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server/libjvm.dylib
>> dyld: loaded: /usr/lib/libstdc++.6.0.9.dylib
>> 
>> In the not working session:
>> dlopen(librexxapi.dylib, 0x00000001)
>>   dlopen(librexxapi.dylib) ==> 0x10dd4a990
>> dlopen(libBSF4ooRexx.dylib, 0x00000001)
>>   dlopen() failed, error: 'dlopen(libBSF4ooRexx.dylib, 1): image not found'
>> dlopen(/usr/lib/libBSF4ooRexx.dylib, 0x00000001)
>>   dlopen() failed, error: 'dlopen(/usr/lib/libBSF4ooRexx.dylib, 1): image 
>> not found'
>>    919 *-* ::routine xBSF                   PUBLIC   EXTERNAL "LIBRARY 
>> BSF4ooRexx BSF                 "
>>      1 *-* call bsf.cls
>> Error 98 running 
>> /local/rexx/bsf4oorexx/BSF4ooRexx_install_v641-20210715-beta/bsf4oorexx/BSF.CLS
>>  line 919:  Execution error.
>> Error 98.903:  Unable to load library "BSF4ooRexx".
>> 
> Wow, learned about "DYLD_PRINT_LIBRARIES" and "DYLD_PRINT_APIS", very useful!
>> I find "/usr/lib” in one file:
>> SysLibrary.cpp
>> 
>>     // try loading directly
>>     libraryHandle = dlopen(nameBuffer, RTLD_LAZY);
>>     // if not found, then try from /usr/lib
>>     if (libraryHandle == NULL)
>>     {
>>         sprintf(nameBuffer, "/usr/lib/lib%s%s", name, 
>> ORX_SHARED_LIBRARY_EXT);
>>         libraryHandle = dlopen(nameBuffer, RTLD_LAZY);
>> 
>> The part to investigate is how to make the first dlopen work without using 
>> DYLD_LIBRARY_PATH:
> Indeed.
>> If I put libBSF4ooRexx.dylib in the lib folder of oorexx then it works 
>> (RPATH).
> Tried it on 11.4, but unfortunately does not work. It may have to do with  
> ... cut ...
> 
> While adding debug statements to SysLibrary.cpp (adding "/usr/local/lib" as 
> another explicit location) and using dlerror() I just got: "Library not 
> loaded: "@rpath/libjvm.dylib | Referenced from: 
> /usr/local/lib/libBSF4ooRexx.dylib | Reason: image not found!".
> 
> This is strange as BSF4ooRexx explicitly looks in different locations for 
> libjvm.dylib and is not compiled with rpath in effect. And the first location 
> ("/opt/BSF4ooRexx/libjvm.dylib") exists in this case (as a symbolic link) 
> such that dlopen("/opt/BSF4ooRexx/libjvm.dylib", RTLD_LAZY | RTLD_GLOBAL) 
> should succeed. It seems that somehow ooRexx loading libBSF4ooRexx.dylib also 
> causes an error as "@rpath/libjvm.dylib" would not exist.
> 
> Adding a symbolic link to libjvm.dylib to ooRexx' lib directory indeed makes 
> libBSF4ooRexx.dylib load successfully! Interestingly, the code in BSF4ooRexx 
> gets excercised then "/opt/BSF4ooRexx/libjvm.dylib" gets loaded and not 
> "@rpath/libjvm.dylib"! 
> Or with other words: ooRexx will find "libBSF4ooRexx.dylib", but cannot load 
> it successfully because dlopen() is not able to find "@rpath/libjvm.dylib" 
> (which is somewhere else and will be searched for in different locations). 
> But I am stumped that that would be the case at all as rpath is not 
> explicitly defined for creating the libBSF4ooRexx.dylib with g++, it gets 
> linked against an installed, existing libjvm.dylib.  
> <https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling> 
> <https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling> 
> has a section on Mac, but I found not yet a solution. 
> Any ideas, hints and pointers highly welcome! 
> ---rony
> P.S.: 
> Java seems to be able to load "libBSF4ooRexx.dylib" nevertheless (in that use 
> case Java, i.e. libjvm.dylib, is already running so dlopen() will probably 
> fetch it from the loaded modules)!
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel

_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to