Hi again all,

I solved the loading issue of loading my TCL API shared library by adding
during the link the option: -Wl,-rpath,'blablabla' following Karl's advice.

Thank you Karl.

I now can load my library, except I am getting a fatal signal which I have
to investigate. It may be related to the patch not applied to my TCL 8.6
distribution?


Thank you

Brice,



On Thu, Aug 1, 2013 at 8:35 AM, Brice Hamon <[email protected]> wrote:

> Hi all,
>
> Well I spent a little more time on this problem and I find something
> interesting.
>
> When I dump the env() from inside the "Rivet" interpreter spawned by
> apache, this environment is not the root one. It's minimal.
>
> env(LANG) = [en_US.UTF-8]
> env(get_includes_done) = [true]
> env(PWD) = [/]
> env(DOC_SERVER) = [no]
> env(ROOTFS_BLKDEV) =
> [/dev/disk/by-id/ata-M4-CT512M4SSD2_000000001203032ABACD-part2]
> env(get_module_list_done) = [true]
> env(vga) = [0x31a]
> env(ROOTFS_FSTYPE) = [ext4]
> env(SHLVL) = [0]
> env(ROOTFS_FSCK) = [0]
> env(splash) = [silent]
> env(PATH) = [/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
>
> So of course my lib does not load. I suspect it's the wwwrun user's.
>
> Any thoughts?
>
> Thanks
> B.
>
>
> On Wed, Jul 31, 2013 at 8:42 AM, Brice Hamon <[email protected]>wrote:
>
>> Hi Massimo,
>>
>> No I just took the 8.6 source file from the tcl website. I thought 8.6
>> had the fix already. How do I do this? I am unfamiliar with it.
>>
>> I just do a load with the path of the library, in my case load
>> /export/home/prodmaster/work/bs/lib/libBSTclApi.so
>>
>> What I don't get is that the root user can load this library with all
>> dependencies inside a tclsh without problem, but not within Rivet.
>> I thought the fork inherits the environment from the parent's process.
>>
>> Thank you,
>>
>> Brice.
>>
>>
>>
>> On Wed, Jul 31, 2013 at 4:36 AM, Massimo Manghi 
>> <[email protected]>wrote:
>>
>>> Hi Brice
>>>
>>>
>>> On 30-07-2013 20:15, Brice Hamon wrote:
>>>
>>>> Hi guys,
>>>>
>>>> I decided to work around the fileevent problem and to go with tcl 8.6.
>>>>
>>>> So I recompiled TCL with multi-threading, my TCL API lib, and Rivet.
>>>> Re-install all and run some test program by hand, so far so good.
>>>>
>>>>
>>> did you compile the Tcl version with the fix for the fork call?
>>>
>>>  Now the important test I was planing is:  during the
>>>> RivetInitChildScript, loading my TCL API and create some sessions.
>>>>
>>>> I now have a simple problem that I am sure you guys knows the answer
>>>> in 10 seconds: my TCL API lib (.so) has around 10 dependencies with
>>>> other .so files (mostly mine).
>>>>  The RivetInitChildScript fails because it cant find dependency
>>>>
>>>> libraries.
>>>>
>>>> I am guessing my environment is not correct and I should set the
>>>> LD_LIBRARY_PATH correctly.
>>>>
>>>> So I set the user root with the correct LD_LIBRARY_PATH (as my httpds
>>>> run as root) and try by hand (tclsh -> load ...../blabla.so). All
>>>> works fine.
>>>>
>>>> But when the same line is called in the RivetInitChildScript, the
>>>> loading fails.
>>>>
>>>>
>>> I hit myself the LD_LIBRARY_PATH problem trying to tell Apache to load
>>> the Tcl library with the fix made by Jan. Eventually it worked.
>>>
>>> What kind of path did you put as argument of the 'load' call? Is it
>>> possible
>>> Apache did some chdir (mod_rivet does IIRC) that might deceive your
>>> script?
>>>
>>>
>>>  Any ideas how to set the correct path when the module is loaded and
>>>> run?
>>>>
>>>> Thank you,
>>>>
>>>> Brice.
>>>>
>>>
>>>
>>>  -- Massimo
>>>
>>>
>>>
>>
>

Reply via email to