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

timotheecour via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Dec 9 18:53:48 PST 2016


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?


More information about the Digitalmars-d-learn mailing list