Chandu
Chandu

Reputation: 2049

gcc -Wl,--exclude-libs,<library.a> is not working

Im using gcc on Linux and creating a shared library for static libraries. I dont want symbols from some static libraries to be exported.

gcc version is 4.8.0.

Im trying this option at gcc command and it's not working:

-Wl,--exclude-libs,libabc.a .

If I use this option, it's removing all the symbols which not what I want.:

-Wl,--exclude-libs,ALL

Can somebody help in how to use --exclude-option and not to export symbols from specific static library, please?

Thanks Chandra

Upvotes: 1

Views: 15977

Answers (1)

keltar
keltar

Reputation: 18409

Please ignore my comment to question, it is incorrect.

Minimal example:

test1.c:

int testvar1;
int test1(void) {
    return 1;
}

test2.c:

extern int testvar1;
int test1(void);

int test2(void) {
    testvar1 = -1;
    return test1() + 2;
}

test.c:

#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char **argv) {
    void *lib = dlopen("./libtest2.so", RTLD_NOW);
    int (*f)(void) = dlsym(lib, "test2");
    printf("%d\n", f());

    return 0;
}

Build:

$ gcc -fPIC -c test1.c
$ ar cru libtest1.a test1.o
$ gcc -fPIC -c test2.c
$ gcc -shared -o libtest2.so test2.o -L. -ltest1 -Wl,--exclude-libs,libtest1.a
$ gcc test.c -ldl
$ ./a.out
3
$ readelf --syms -D libtest2.so | grep test1
$

Upvotes: 6

Related Questions