Re: The module 'foo' is already defined in 'libmylib.so'

2016-12-09 Thread timotheecour via Digitalmars-d-learn

On Saturday, 10 December 2016 at 02:39:33 UTC, timotheecour wrote:
Have a look at what `trace -E d_executable args` and `trace -E 
c++_executable args`

print on startup and grep for dlopen calls and the like.


do you mean strace?
I have trace on OSX but I'm asking for linux.


Looking at the code for $checkModuleCollisions in druntime 
[src/rt/sections_elf_shared.d:859]:


```
 * Check for module collisions. A module in a shared library 
collides
 * with an existing module if it's ModuleInfo is interposed 
(search
 * symbol interposition) by another DSO.  Therefor two modules 
with the
 * same name do not collide if their DSOs are in separate symbol 
resolution

 * chains.
```

Not exactly sure what that means nor how to fix my issue:

```
void some_fun(){
  handle=dlopen2("path/liblib.so", RTLD_LAZY | RTLD_LOCAL);
  // error: The module 'foo' is already defined in 'libmylib.so'
}
```

How would I modify the code to avoid this?


Re: The module 'foo' is already defined in 'libmylib.so'

2016-12-09 Thread timotheecour via Digitalmars-d-learn
Have a look at what `trace -E d_executable args` and `trace -E 
c++_executable args`

print on startup and grep for dlopen calls and the like.


do you mean strace?
I have trace on OSX but I'm asking for linux.



Re: The module 'foo' is already defined in 'libmylib.so'

2016-12-01 Thread Nicholas Wilson via Digitalmars-d-learn

On Thursday, 1 December 2016 at 22:05:06 UTC, Timothee Cour wrote:
I want to update a library with new symbols (ie partial 
recompilation):


libmylib.so : compiled from bar.d and foo.d

now update the file foo.d

dmd -c -fPIC foo.d -offoo.o

clang++ -o libmylib_update.so foo.o -shared -Wl,-lmylib

When trying to dlopen libmylib_update.so from C++ it fails 
with: The module 'foo' is already defined in 'libmylib.so'


(it somehow works when the dlopen is called from D)

How would I achieve that?


Have a look at what `trace -E d_executable args` and `trace -E 
c++_executable args`

print on startup and grep for dlopen calls and the like.


The module 'foo' is already defined in 'libmylib.so'

2016-12-01 Thread Timothee Cour via Digitalmars-d-learn
I want to update a library with new symbols (ie partial recompilation):

libmylib.so : compiled from bar.d and foo.d

now update the file foo.d

dmd -c -fPIC foo.d -offoo.o

clang++ -o libmylib_update.so foo.o -shared -Wl,-lmylib

When trying to dlopen libmylib_update.so from C++ it fails with:
The module 'foo' is already defined in 'libmylib.so'

(it somehow works when the dlopen is called from D)

How would I achieve that?