Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1038633
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T14:59:57+00:00 2026-05-16T14:59:57+00:00

I have a static library, Foo, that is used by a shared library, Bar.

  • 0

I have a static library, Foo, that is used by a shared library, Bar. Bar is the native shared library loaded by my Android app. Foo contains JNI functions that are only called by Java code and not by any C++ code in Bar. Because of this, those JNI functions get stripped out of the static library (Foo) when the shared library (Bar) is built. I’m currently using a slightly hacky method to prevent that from happening.

So, in this case, is there a way to tell the compiler to not strip the JNI (or any) functions out when linking?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T14:59:58+00:00Added an answer on May 16, 2026 at 2:59 pm

    They’re not getting stripped, they’re getting ignored. When the shared library is linked, the linker is only pulling in the object files with functions that are actually used. (This is how static libs are defined to work.)

    I believe passing the “–whole-archive” flag to the linker will cause it to pull in all object files from a static library. You can provide it on the gcc link line with “-Wl,-whole-archive”. You need to follow it with “-Wl,-no-whole-archive” after specifying your library, or ld will continue the behavior for any other static libraries it encounters, which is likely not the behavior you want. See also the ld(1) man page on a Linux system.

    Another way to accomplish the same thing is to output a single massive .o file instead of a .a file.

    EDIT:
    Simple command-line example, using libz on the desktop:

    % echo "int main() { return 0; }" > foo.c
    % gcc -o foo /usr/lib/libz.a foo.c
    % ls -s foo
    12 foo*
    % gcc -o foo -Wl,-whole-archive /usr/lib/libz.a -Wl,-no-whole-archive foo.c
    % ls -s foo
    104 foo*
    

    (You have to use “/usr/lib/libz.a” instead of “-lz” here because the latter finds the shared library /usr/lib/libz.so.)

    I haven’t used the NDK much, but it looks like adding the flags to LOCAL_LDFLAGS might do the trick.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I want to create a shared library that uses functions from a 3rd-party static
I have a static library that is used in production code and test code.
I have a static library that I want to distribute that has includes Foo.c/h
I have a static library (let's call it S) that uses a category (NSData+Base64
I was given an static library (.a extension file) that I have to use
I have some code shared among multiple projects in a static library. Even with
I have a Visual Studio 2008 C++ project that outputs a static library and
I have a question on shared libraries vs static libraries loading time. Assume that
I have a library, foo, for which I've produced a static object (libfoo.a). I
I have a static library that I have built with MinGW, I am trying

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.