Guten Abend Rony
> would it ease your use case/be of help for your use case, if I were to add 
> honoring an environment variable (e.g. "BSF4ooRexx_Library") which would need 
> to fully qualify (absolute path) the BSF4ooRexx- library to be loaded? 
> 
Not needed on my side.

My no-install setup sets these variables:
BSF4Rexx_JavaStartupOptions="-Djava.library.path=...
CLASSPATH
DYLD_LIBRARY_PATH
JAVA_HOME
PATH

I think the new variable you propose would be redundant with 
BSF4Rexx_JavaStartupOptions ?
It’s not a problem for me to define BSF4Rexx_JavaStartupOptions.


Jean-Louis

> On 21 Jul 2021, at 18:57, Rony G. Flatscher <rony.flatsc...@wu.ac.at> wrote:
> 
> Bonsoir Jean-Louis,
> 
> one question ad your test case # 3 which you were able to resolve with 
> BSF4ooRexx_setup: 
> would it ease your use case/be of help for your use case, if I were to add 
> honoring an environment variable (e.g. "BSF4ooRexx_Library") which would need 
> to fully qualify (absolute path) the BSF4ooRexx- library to be loaded? 
> [I tested it and it would be possible as it works in the baseline Java 
> version 1.6. That's the "6" in the version number "641", where "41" is the 
> ooRexx baseline, i.e. ooRexx version 4.1.]
> ---rony
> 
> On 21.07.2021 17:53, Jean Louis Faucher wrote:
>> Guten tag Rony
>> 
>>> A question here: after you removed the shebang line how were you able to 
>>> successfully invoke/run "rexx2.sh 1-010_HellowWorld.rxj"?
>>> 
>> 
>> That was the purpose of the side note, to explain why it works.
>> 
>> By the way, during my tests, I ran setupBSF.rex to review the generated 
>> scripts, and I noticed that rexxj.sh has no shebang. Keep it like that! It’s 
>> just to say that it works without shebang.
>> 
>> I’m curious to know if the most recent versions of MacOs still keep the DYLD 
>> variables when no shebang…
>> A simple echo $DYLD_LIBRARY_PATH is enough to check that.
>> 
>> If, at one moment, Apple decides to “fix” that, then the only workaround 
>> will be to put a copy of /bin/sh in /usr/local/bin, to make it unprotected 
>> by SIP.
>> Of course, this is not something for production, but still can be useful for 
>> a development machine.
>> 
>> 
>> Thanks for the background informations!
>> I understand that 
>>> java.lang.System.loadLibrary(libName)
>> takes care of java.library.path to find LibName, but the libs needed by 
>> LibName are not searched with the paths in java.library.path:
>> I have the path to ooRexx5 lib in java.library.path, they are not found when 
>> the shebang is used, i.e. when DYLD_LIBRARY is deleted.
>> 
>> 
>> Jean-Louis
>> 
>> 
>>> On 21 Jul 2021, at 17:03, Rony G. Flatscher <rony.flatsc...@wu.ac.at 
>>> <mailto:rony.flatsc...@wu.ac.at>> wrote:
>>> 
>>> Bonjour Jean-Louis,
>>> 
>>> thank you very much for your information!
>>> On 21.07.2021 09:21, Jean Louis Faucher wrote:
>>>> Guten tag Rony
>>>> 
>>>> Thanks a lot for the detailed explanations.
>>>> After setting BSF4Rexx_JavaStartupOptions as you explained, the 3rd test 
>>>> case is ok now.
>>>> More tests:
>>>> 
>>>> rexx 1-030_JavaVersion.rxj works correctly.
>>>> 
>>>> rexxj2.sh 1-010_HelloWorld.rxj did not work because of "Library not 
>>>> loaded: @rpath/librexx.4.dylib”
>>>> Should be found with DYLD_LIBRARY_PATH, but SIP deleted it:
>>>> - rexxj2.sh has a shebang line #!/bin/sh, which is protected by SIP
>>>> - the default java is protected by SIP.
>>>> 
>>>> After installing a local JDK (just unzip + set JAVA_HOME) and removing the 
>>>> shebang line of rexxj2.sh, that worked.
>>> 
>>> A question here: after you removed the shebang line how were you able to 
>>> successfully invoke/run "rexx2.sh 1-010_HellowWorld.rxj"?
>>> 
>>> 
>>> ---
>>> Ad background to "rexxj.sh"/"rexxj2.sh": 
>>> purpose: run Rexx scripts via java instead of via the rexx binary using the 
>>> file name of the Rexx script as argument, optionally followed by arguments 
>>> for the Rexx script 
>>> 
>>> so "rexxj[2].sh" Java gets launched (if the environment variable 
>>> "BSF4Rexx_JavaStartupOptions" exists then its value gets passed to java, 
>>> which configures the Java virtual machine, JVM) which loads the BSF4ooRexx 
>>> Java class named "org.rexxla.bsf.RexxDispatcher" and run its static main 
>>> method supplying all command line arguments. 
>>> 
>>> the main method of the Java class "org.rexxla.bsf.RexxDispatcher" will 
>>> create an instance of  "org.apache.bsf.BSFManager" 
>>> 
>>> all the command line arguments as parsed and supplied by Java and passed on 
>>> to the static main method as a Java String array get registered with the 
>>> BSFManager instance under the name "allCommandLineArguments"; 
>>> 
>>> BSFManager needs to find and create the engine for Rexx: it looks up the 
>>> BSF defined engine names and dynamically loads the Java class 
>>> "org.rexxla.bsf.engines.rexx.RexxEngine" which extends the abstract class 
>>> "org.apache.bsf.util.BSFEngineImpl" which  implements  the interface class 
>>> "org.apache.bsf.BSFEngine" 
>>> 
>>> an instance of "org.rexxla.bsf.engines.rexx.RexxEngine" gets created and 
>>> the current set of BSFManager registered beans will get registered with the 
>>> RexxEngine instance
>>> 
>>> the RexxEngine instance will have its "initialize()" method invoked
>>> 
>>> the RexxEngine creates an instance of 
>>> "org.rexxla.bsf.engines.rexx.RexxAndJava" which serves as the interface for 
>>> this combination of this BSFManager instance and this RexxEngine instance
>>> 
>>> the very first time the "org.rexxla.bsf.engines.rexx.RexxAndJava" class 
>>> gets loaded its static constructor will - among other things - load the 
>>> dynamic BSF4ooRexx library using java.lang.System.loadLibrary(libName)
>>> 
>>> the constructor of "org.rexxla.bsf.engines.rexx.RexxAndJava" will use a 
>>> native method from the BSF4ooRexx dynamic library to initialize it
>>> 
>>> the RexxEngine registers the BSFManager's registered beans with its 
>>> instance such that a Rexx programmer can get at the Java parsed arguments 
>>> (a Java array of type String) with the statement:
>>> 
>>> argsByJava=bsf.lookupBean("allCommandLineArguments")    
>>> 
>>> the freshly created RexxEngine is then used to execute the supplied Rexx 
>>> script (which will be read from file), supplying the arguments to the Rexx 
>>> script
>>> 
>>> at the very first time a Rexx script needs to be executed, the RexxEngine 
>>> creates a RexxInterpreter instance for that purpose, and reuses it each 
>>> time Rexx code needs to get executed via this RexxEngine
>>> 
>>> Remark: for Java programmers it is possible to configure the 
>>> RexxInterpreter before the very first usage (e.g. command handlers, exits, 
>>> file extensions, etc.); the BSF4ooRexx samples demonstrate this in form of 
>>> nutshell samples
>>> 
>>> BSF.CLS when called or required from a Rexx script will check, whether Java 
>>> is already loaded (which in this use case will be the case) and if so, it 
>>> does not load Java (even if a Rexx programmer attempted to do that, a Rexx 
>>> condition would be raised: BSF4ooRexx/routine/BsfLoadJava(), error 1.999: 
>>> JVM is already loaded); 
>>> BSF.CLS uses the external Rexx function BsfInvokedBy() which returns "0" if 
>>> Java is not loaded yet, "1" if Java loaded ooRexx, "2" if ooRexx loaded Java
>>> 
>>> ---
>>> 
>>> 
>>> Ad necessity to use "rexxj.sh"/ "rexxj2.sh" on MacOSX if running Rexx 
>>> scripts that use any of the Java GUI classes (awt, swing, JavaFX): 
>>> unfortunately it is not possible to use the Java GUI classes if Java gets 
>>> loaded via Rexx. The reason being that an MacOSX event loop on MacOSX is 
>>> not started and present, such that awt/swing/JavaFX cannot be intertwined 
>>> with the MacOS event loop. 
>>> [If ooRexx was somehow able to initialize this support one could use rexx 
>>> to run the Rexx scripts on this platform as well. If anyone has any ideas, 
>>> knowledge or experimental code, I would really appreciate it a lot to learn 
>>> about them! It may be even some silly little piece of "how-to" to make this 
>>> work.]
>>> However starting Java first initializes its runtime environment in a way 
>>> that it allows for using the MacOSX event loop and therfore its GUI 
>>> classes. Therefore "rexxj.sh" on MacOSX is mandatory in the case the Rexx 
>>> program uses any of the GUI classes. This is also the reason why "rexxj.sh" 
>>> gets associated with the Rexx scripts on MacOSX.
>>> ---rony
>>> 
>>>> 
>>>> Side note about the shebang:
>>>> https://stackoverflow.com/questions/12296308/shell-script-working-fine-without-shebang-line-why
>>>>  
>>>> <https://stackoverflow.com/questions/12296308/shell-script-working-fine-without-shebang-line-why>
>>>> "An executable file without a shebang and not matching an binary 
>>>> executable format is run with sh."
>>>> sh is protected by SIP, so DYLD_LIBRARY_PATH should be deleted... But it’s 
>>>> not. At least under High Sierra.
>>>> 
>>>> 
>>>> Jean-Louis
>>>> 
>>>>> On 20 Jul 2021, at 13:55, Rony G. Flatscher <rony.flatsc...@wu.ac.at 
>>>>> <mailto:rony.flatsc...@wu.ac.at>> wrote:
>>>>> 
>>>>> Bonjour Jean-Louis,
>>>>> 
>>>>> thank you very much for looking into this!
>>>>> 
>>>>> In this use case in which rexx (because of BSF.CLS) loads 
>>>>> libBSF4ooRexx.dylib which then tries to locate and load libjvm.dylib 
>>>>> et.al. the following would apply:
>>>>> 
>>>>> rexx -e "call bsf.cls" 
>>>>> rexx -e "call bsf.cls; say .bsf4rexx~display.version; say 
>>>>> .java.lang.System~getProperty('java.library.path')"
>>>>> 
>>>>> rexx needs to be able to load libBSF4ooRexx.dylib
>>>>> 
>>>>> even if /opt/BSF4ooRexx existed rexx would not load anything from there 
>>>>> as that location is unknown to it
>>>>> 
>>>>> so either DYLD_LIBRARY_PATH needs to be set and point to the directory 
>>>>> where libBSF4ooRexx.dylib can be loaded from or place a symbolic link 
>>>>> into /usr/local/lib/libBSF4ooRexx.dylib such that the system can find and 
>>>>> load it
>>>>> 
>>>>> once libBSF4ooRexx.dylib got loaded successfully from rexx the 
>>>>> initialization code ("prolog") of BSF.CLS will use it to see whether Java 
>>>>> is already loaded and if not load libjvm.dylib ("Java") at that point in 
>>>>> time 
>>>>> 
>>>>> Since yesterday's version of libBSF4ooRexx.dylib ("BSF 641.20210719") 
>>>>> MacOS uses these places to find and load Java (libjvm.dylib):
>>>>> 
>>>>> /opt/BSF4ooRexx/libjvm.dylib 
>>>>> comment: if you used the install script a symbolic link to the Java 
>>>>> version that got used to install BSF4ooRexx will be created there, such 
>>>>> that that version (as long as it did not get updated) can be found and 
>>>>> used; one could delete this symbolic link to have the next searches for 
>>>>> libjvm.dylib take place:
>>>>> 
>>>>> if JAVA_HOME is defined then the following two attempts get carried out 
>>>>> (this got added this past weekend, a long standing intent)
>>>>> 
>>>>> ${JAVA_HOME}/lib/server/libjvm.dylib and if not found, then
>>>>> ${JAVA_HOME}/jre/lib/server/libjvm.dylib
>>>>> comment: starting with Java 9 (and then adjusted accordingly for Java 8 
>>>>> LTS) the directory layout of Java got changed such that these two 
>>>>> locations may carry libjvm.dylib, depending on the installed Java 
>>>>> versions 
>>>>> 
>>>>> /System/Library/Frameworks/JavaVM.framework/JavaVM
>>>>> comment: this location (Apple only) stems from the days when Apple 
>>>>> supplied its own Java which now seems to find the default installed Java 
>>>>> 
>>>>> libjvm.dylib
>>>>> comment: this causes the operating system lookup to be employed to locate 
>>>>> libjvm.dylib 
>>>>> 
>>>>> after loading Java eventually successfully from the Rexx side (which is 
>>>>> the case in all of your test cases!), the next step is using a Java class 
>>>>> that causes the Java BSF scripting support for Rexx to be initialized; in 
>>>>> this process libBSF4ooRexx.dylib needs to be loadable by the Java side 
>>>>> which uses java.library.path to search for libraries; if not found the 
>>>>> error message "[BSFManager.loadScriptingEngine()] unable to load 
>>>>> language: rexx: java.lang.UnsatisfiedLinkError: no BSF4ooRexx in 
>>>>> java.library.path" gets issued; e.g. (from above)
>>>>> 
>>>>>     rexx -e "call bsf.cls; say .bsf4rexx~display.version; say 
>>>>> .java.lang.System~getProperty('java.library.path')"
>>>>> 
>>>>> will display the java.library.path in effect; since yesterday ("BSF 
>>>>> 641.20210719") the new default for Unix (including Apple) is defined to 
>>>>> be (note the current directory as the last one to look up): 
>>>>> 
>>>>>    /opt/BSF4ooRexx:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64:.
>>>>> 
>>>>> such that libBSF4ooRexx.dylib needs to be in one of these six locations 
>>>>> comment: it would be possible to set the value for java.library.path that 
>>>>> gets used by defining an environment symbol named 
>>>>> "BSF4Rexx_JavaStartupOptions" with the Java desired startup options (just 
>>>>> enter "java" in a Terminal to see the standard startup options), in this 
>>>>> case you would need to have also something like the following as sole 
>>>>> entry or as part of it (a supplied definition for java.library.path will 
>>>>> inhibit BSF4ooRexx to use its default):
>>>>> -Djava.library.path=the:paths:to:lookup:by:java
>>>>> If libBSF4ooRexx.dylib cannot be loaded by Java at this stage then the 
>>>>> loading of the Rexx script engine will cause an exception with the error 
>>>>> message that you experience:
>>>>> So with this context the test cases behave as expected. 
>>>>> ---
>>>>> Ad JAVA_HOME: this environment variable is very common in the Java world. 
>>>>> It allows to have many different Java versions on the same computer 
>>>>> (there are zip archives for Java which one merely can unzip) and use 
>>>>> different Java versions in different processes. Changing JAVA_HOME then 
>>>>> allows one to test an application on a different/specific Java version.
>>>>> 
>>>>> ---
>>>>> A hint ad using BSF4ooRexx in a non-installed use-case: if you change 
>>>>> into the unzipped directory of the BSF4ooRexx zip-archive, i.e. 
>>>>> "bsf4oorexx/install" and 
>>>>> run "setupBSF.rex" in "bsf4oorexx/install", then the installation and 
>>>>> companion scripts get created and a symbolic link to the system's 
>>>>> libBSF4ooRexx.dylib (there may be different on different Linuxes) gets 
>>>>> created in the unzipped "bsf4oorexx" directory; the created script 
>>>>> "setEnvironment4BSF.sh" will allow you to temporarily set your session's 
>>>>> environment to use this version of BSF4ooRexx, just source it and the 
>>>>> appropriate CLASSPATH environment variable will be set
>>>>> 
>>>>> if you have OpenOffice or LibreOffice installed and want to use it for 
>>>>> the AOO/LO Rexx sample and utility scripts (file extensions ".rxo", rexx 
>>>>> script for OpenOffice), then run "setupOOo.rex" in "bsf4oorexx/install" 
>>>>> which will also create a "setEnvironment4OOo.sh" which you can source 
>>>>> (CLASSPATH gets changed to point to the AOO/LO jar files that allow to 
>>>>> use AOO/LO via BSF4ooRexx)
>>>>> 
>>>>> if you then use PATH and DYLD_LIBRARY_PATH to point to the unzipped 
>>>>> "bsf4oorexx" directory you should be able to run all ooRexx scripts of 
>>>>> BSF4ooRexx in that session.
>>>>> Again, many thanks for taking the time to test this version!
>>>>> 
>>>>> ---rony
>>>>> 
>>>>> On 20.07.2021 11:36, Jean Louis Faucher wrote:
>>>>>> Guten tag Rony
>>>>>> 
>>>>>> I have the same error in the 3 test cases.
>>>>>> 
>>>>>> Note:
>>>>>> I don’t have a directory /opt/BSF4ooRex
>>>>>> I don’t have an environment variable with value /opt/BSF4ooRex
>>>>>> 
>>>>>> 
>>>>>> 1st test case
>>>>>> Nothing in DYLD_LIBRARY_PATH
>>>>>> libBSF4ooRexx.dylib copied in oorexx5 lib
>>>>>> 
>>>>>> rexx -e “call bfs.cls”
>>>>>> [BSFManager.loadScriptingEngine()] unable to load language: rexx: 
>>>>>> java.lang.UnsatisfiedLinkError: no BSF4ooRexx in java.library.path
>>>>>> 
>>>>>> libBSF4ooRexx.dylib is correctly loaded from oorexx5 lib
>>>>>> dlopen(libBSF4ooRexx.dylib, 0x00000001)
>>>>>> dyld: loaded: 
>>>>>> /local/rexx/oorexx/build/official/main/trunk/macos/clang/release/64/delivery/lib/libBSF4ooRexx.dylib
>>>>>> 
>>>>>> libjvm is not found
>>>>>> dlopen(/opt/BSF4ooRexx/libjvm.dylib, 0x00000009)
>>>>>>   dlopen() failed, error: 'dlopen(/opt/BSF4ooRexx/libjvm.dylib, 9): 
>>>>>> image not found'
>>>>>> 
>>>>>> 
>>>>>> 2nd test case
>>>>>> remove libBSF4ooRexx.dylib from oorexx5 lib
>>>>>> Put my install directory of libBSF4ooRexx.dylib in DYLD_LIBRARY_PATH
>>>>>> libjvm directory not put in DYLD_LIBRARY_PATH
>>>>>> 
>>>>>> rexx -e “call bfs.cls”
>>>>>> [BSFManager.loadScriptingEngine()] unable to load language: rexx: 
>>>>>> java.lang.UnsatisfiedLinkError: no BSF4ooRexx in java.library.path
>>>>>> 
>>>>>> libBSF4ooRexx.dylib is correctly loaded from my install directory
>>>>>> dlopen(libBSF4ooRexx.dylib, 0x00000001)
>>>>>> dyld: loaded: 
>>>>>> /local/rexx/bsf4oorexx/BSF4ooRexx_install_v641-20210719-beta/bsf4oorexx/install/64/libBSF4ooRexx.dylib
>>>>>> 
>>>>>> libjvm is not found
>>>>>> dlopen(/opt/BSF4ooRexx/libjvm.dylib, 0x00000009)
>>>>>>   dlopen() failed, error: 'dlopen(/opt/BSF4ooRexx/libjvm.dylib, 9): 
>>>>>> image not found'
>>>>>> 
>>>>>> 
>>>>>> 3rd test case
>>>>>> Add libjvm directory in DYLD_LIBRARY_PATH
>>>>>> 
>>>>>> rexx -e “call bfs.cls”
>>>>>> [BSFManager.loadScriptingEngine()] unable to load language: rexx: 
>>>>>> java.lang.UnsatisfiedLinkError: no BSF4ooRexx in java.library.path
>>>>>> 
>>>>>> libBSF4ooRexx.dylib is correctly loaded from my install directory
>>>>>> dlopen(libBSF4ooRexx.dylib, 0x00000001)
>>>>>> dyld: loaded: 
>>>>>> /local/rexx/bsf4oorexx/BSF4ooRexx_install_v641-20210719-beta/bsf4oorexx/install/64/libBSF4ooRexx.dylib
>>>>>> 
>>>>>> libjvm is loaded (despite the path passed to dlopen)
>>>>>> dlopen
>>>>>> x/libjvm.dylib, 0x00000009)
>>>>>> dyld: loaded: 
>>>>>> /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server/libjvm.dylib
>>>>>> 
>>>>>> 
>>>>>>> On 19 Jul 2021, at 18:01, Rony G. Flatscher <rony.flatsc...@wu.ac.at 
>>>>>>> <mailto:rony.flatsc...@wu.ac.at>> wrote:
>>>>>>> 
>>>>>>> Bonsoir Jean-Louis,
>>>>>>> 
>>>>>>> today I finished up a new version of BSF4ooRexx that should work in 
>>>>>>> this use-case. You can get it from 
>>>>>>> <https://sourceforge.net/projects/bsf4oorexx/files/beta/20200928/BSF4ooRexx_install_v641-20210719-beta.zip/download>
>>>>>>>  
>>>>>>> <https://sourceforge.net/projects/bsf4oorexx/files/beta/20200928/BSF4ooRexx_install_v641-20210719-beta.zip/download>.
>>>>>>>  (This version got tested against MacOS, Linux and Windows.)
>>>>>>> If you test this version in your environment then please let me know of 
>>>>>>> any difficulties or problems that you encounter. (This version of 
>>>>>>> BSF4ooRexx is still supposed to be usable against ooRexx 4.1 and 
>>>>>>> higher, however 5.0 is *strongly* advised due to its stable 
>>>>>>> multithreadingness. For that reason some JavaFX samples will deny being 
>>>>>>> run on ooRexx prior to 5.0. This is another reason for me to ask for a  
>>>>>>>                                          release version of ooRexx 5.0 
>>>>>>> beta *as is*, as it is much stabler, faster and powerful than any 
>>>>>>> earlier version of ooRexx.)
>>>>>>> 
>>>>>>> ---rony
>>>>>>> 
>>>>>>> On 18.07.2021 00:02, Jean Louis Faucher wrote:
>>>>>>>> Gute nacht Rony
>>>>>>>> 
>>>>>>>> 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).
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 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".
>>>>>>>> 
>>>>>>>> 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:
>>>>>>>> If I put libBSF4ooRexx.dylib in the lib folder of oorexx then it works 
>>>>>>>> (RPATH).
>>>>>>>> If I put libBSF4ooRexx.dylib in the current directory then it works 
>>>>>>>> (see man dlopen).
>>>>>>>> I don’t know if other solutions are possible for the first dlopen
>>>>>>>> 
>>>>>>>> The other solution could to add “/usr/local/lib” as 2nd fallback.
>>>>>>>> But that brings the question of order.
>>>>>>>> Maybe a more general solution would be to use an environment variable 
>>>>>>>> like REXX_LIBRARY_PATH.
>>>>>>>> We have already REXX_PATH for locating the rexx files.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Jean-Louis
>>>>>>>> 
>>>>>>>>> On 17 Jul 2021, at 21:56, Rony G. Flatscher <rony.flatsc...@wu.ac.at 
>>>>>>>>> <mailto:rony.flatsc...@wu.ac.at>> wrote:
>>>>>>>>> 
>>>>>>>>> On MacOSX the BSF4ooRexx library is named "libBSF4ooRexx.dylib". 
>>>>>>>>> Testing the changes in the BSF4ooRexx installation scripts and then 
>>>>>>>>> testing the resulting installations surfaced a problem on MacOSX: 
>>>>>>>>> libBSF4ooRexx.dylib can be loaded via Java and used successfully. 
>>>>>>>>> However, loading "libBSF4ooRexx.dylib" via ooRexx is not successful. 
>>>>>>>>> To be precise, the 
>>>>>>>>> ::routine xbsf PUBLIC EXTERNAL "LIBRARY BSF4ooRexx BSF"
>>>>>>>>> fails with the execution error:
>>>>>>>>> 
>>>>>>>>> Error 98.903: Unable to load library "BSF4ooRexx".
>>>>>>>>> Here two rexxtry.rex sessions, the first one is run with "rexxj.sh 
>>>>>>>>> /usr/local/bin/rexxtry.rex" which loads a Java program that will load 
>>>>>>>>> the BSF4ooRexx library to then execute /usr/local/bin/rexxtry.rex. 
>>>>>>>>> This is followed by a "rexx rexxtry.rex" session which yields the 
>>>>>>>>> exection error. This is then followed by the "rexx -e" statement 
>>>>>>>>> which does a call BSF.CLS which then shows the full error message:
>>>>>>>>> 
>>>>>>>>> rony@ronymac2014 ~ % rexxj.sh /usr/local/bin/rexxtry.rex 
>>>>>>>>> REXX-ooRexx_5.0.0(MT)_64-bit 6.05 12 Jul 2021
>>>>>>>>>   rexxtry.rex lets you interactively try REXX statements.
>>>>>>>>>     Each string is executed when you hit Enter.
>>>>>>>>>     Enter 'call tell' for a description of the features.
>>>>>>>>>   Go on - try a few...            Enter 'exit' to end.
>>>>>>>>> call bsf.cls
>>>>>>>>>   .............................................. rexxtry.rex on DARWIN
>>>>>>>>> say .bsf4rexx~display.version
>>>>>>>>> ooRexx 5.0.0 r12280 (12 Jul 2021) / BSF 641.20210715 / Java 
>>>>>>>>> 1.8.0_162, 64-bit / Darwin 20.5.0
>>>>>>>>>   .............................................. rexxtry.rex on DARWIN
>>>>>>>>> exit
>>>>>>>>> rony@ronymac2014 ~ % rexxtry.rex 
>>>>>>>>> REXX-ooRexx_5.0.0(MT)_64-bit 6.05 12 Jul 2021
>>>>>>>>>   rexxtry.rex lets you interactively try REXX statements.
>>>>>>>>>     Each string is executed when you hit Enter.
>>>>>>>>>     Enter 'call tell' for a description of the features.
>>>>>>>>>   Go on - try a few...            Enter 'exit' to end.
>>>>>>>>> call bsf.cls
>>>>>>>>>   Oooops ! ... try again.     Execution error.
>>>>>>>>>                               Unable to load library "BSF4ooRexx".
>>>>>>>>>   rc = 98.903 .................................. rexxtry.rex on DARWIN
>>>>>>>>> exit
>>>>>>>>> rony@ronymac2014 ~ % rexx -e "call bsf.cls"
>>>>>>>>>    919 *-* ::routine xBSF                   PUBLIC   EXTERNAL 
>>>>>>>>> "LIBRARY BSF4ooRexx BSF                 "
>>>>>>>>>      1 *-* call bsf.cls
>>>>>>>>> Error 98 running /usr/local/bin/BSF.CLS line 919:  Execution error.
>>>>>>>>> Error 98.903:  Unable to load library "BSF4ooRexx".
>>>>>>>>> rony@ronymac2014 ~ % 
>>>>>>>>> It is the first of five external "LIBRARY BSF4ooRexx XXX" directives 
>>>>>>>>> (these five external function names are: "BSF", "BsfCreateRexxProxy", 
>>>>>>>>> "BsfRexxProxy", "BsfUninit4JavaBean", "BsfLoadJava"). So it is the 
>>>>>>>>> first time the "BSF4ooRexx" library needs to be proecessed by ooRexx 
>>>>>>>>> in this way.
>>>>>>>>> This was tested against the Sourceforge version of ooRexx r12280, 
>>>>>>>>> July 12 2021.
>>>>>>>>> 
>>>>>>>>> Is there anything I could do to help pinpoint the problem?
>>>>>>>>> 
>>>>>>>>> ---
>>>>>>>>> 
>>>>> 
> 
> _______________________________________________
> 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