Comments (7)
BTW I assume everything will work if you compile generated code with -DIMPLIB_HIDDEN_SHIMS
?
from implib.so.
Thank you for using Implib.so.
Yes, it looks like the error is caused by a C++ constructor which calls one of the library functions. It's a chicken and egg problem: Implib.so can not intercept _ZN8nvinfer16LogBufC1EPNS_7ILoggerENS1_8SeverityEm
until the library is loaded (via dlopen
) but dlopen
can not finish until library constructors have completed (for which it needs all functions to be intercepted...).
Quick experiment shows that there is a workaround for this behavior (querying not-yet-fully-loaded library with RTLD_NOLOAD
flag when we run into this error) but it will not work transparently for all the use-cases e.g. not when user provides a custom callback to load the library.
This is a nasty situation, let me think it over.
from implib.so.
Yes it works perfectly with -DIMPLIB_HIDDEN_SHIMS
.
Thank you very much!
from implib.so.
Ah, good. I guess I'll enable this option by default then.
from implib.so.
So, what does this option mean exactly? Is it that the symbols of this library will be hidden and won't be able to be called externally?
In our case, we are creating a library that will depend on libnvinfer.so.6.5.0
. And we don't want to expose libnvinfer.so.6.5.0
to the rest of the code that will depend on our library.
from implib.so.
So, what does this option mean exactly? Is it that the symbols of this library will be hidden
and won't be able to be called externally?
Basically yes. Without this macro the generated wrappers (e.g. for _ZN8nvinfer16LogBufC1EPNS_7ILoggerENS1_8SeverityEm
) will have public visibility i.e. will be exported from your library.
In our case, we are creating a library that will depend on libnvinfer.so.6.5.0. And we don't want to expose libnvinfer.so.6.5.0 to the rest of the code that will depend on our library.
Yes and I think same applies to majority of users. People generally will not want to make wrappers public as this would pollute interface of their libraries with external symbols. So I think wrappers should be hidden by default. I already have a patch for this which I plan to commit later today.
from implib.so.
Shim symbols are now hidden by default so -DIMPLIB_HIDDEN_SHIMS
is no longer needed. Let me know if you have other issues.
from implib.so.
Related Issues (20)
- Option to hide global symbols HOT 3
- Android support? HOT 5
- --no-dlopen option defines NO_DLOPEN in *.so.init.c not correctly HOT 1
- Suggestion for an alternative implementation for --no-dlopen option HOT 15
- Implib IMPLIB_EXPORT_SHIMS triggers an assertion when imported DSO has initializers referring to its public symbols. HOT 3
- question regarding multi-threading limitation HOT 1
- question about cfi_adjust_cfa_offset after just entering into fuction HOT 9
- [Feature Request] mipsel support HOT 17
- Creating a shared library from init.c and tramp.S HOT 5
- Invalid asm for arm when there are more than 256/4096 functions HOT 4
- Aarch64 trampoline asm can't handle large $number HOT 3
- Library soname should be used as load name HOT 4
- Calling exit after library loading failure is not really safe HOT 2
- Shebang should use python3 from path HOT 1
- Support for exported variables HOT 2
- Segmentation fault. HOT 3
- Possible to throw an exception on failure to load target library? HOT 11
- Floating point function arguments are not preserved on slow path HOT 1
- Generating vtables and typeinfos HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from implib.so.