Giter Club home page Giter Club logo

Comments (7)

yugr avatar yugr commented on June 9, 2024 1

BTW I assume everything will work if you compile generated code with -DIMPLIB_HIDDEN_SHIMS?

from implib.so.

yugr avatar yugr commented on June 9, 2024

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.

lazatsoc avatar lazatsoc commented on June 9, 2024

Yes it works perfectly with -DIMPLIB_HIDDEN_SHIMS.

Thank you very much!

from implib.so.

yugr avatar yugr commented on June 9, 2024

Ah, good. I guess I'll enable this option by default then.

from implib.so.

lazatsoc avatar lazatsoc commented on June 9, 2024

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.

yugr avatar yugr commented on June 9, 2024

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.

yugr avatar yugr commented on June 9, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.