开发者

cc static linking: How to import all symbols of just one .a library?

开发者 https://www.devze.com 2023-04-09 07:08 出处:网络
I have 2 static libraries, libalgha.awith 2 functions: func1() and func2() and libbeta.a with 2 functions: func3() and func4()

I have 2 static libraries,

libalgha.a with 2 functions: func1() and func2()

and

libbeta.a with 2 functions: func3() and func4()

I have 1 executable (mytest) linked with these 2 libs. The executable calls only func1() and func3(). So as I understand the linker will put only the symbol of these 2 functions into the executable.

The executable is loading with dlopen() in runtime a shared library (libgamma.so) and this shared library uses the function func2() from libalgha.a. When running mytest I get the error:

symbol func2: referenced symbol not found

I can't include libalgha.a inside libgamma.so because of a Solaris 32/64 bits issue.

So how can I link mytest with all 开发者_运维百科symbols of libalgha.a ?


Include a reference to func2 in your program source like:

extern void func2 ();
void (*pfunc2)() = func2;

Alternatively, link the whole library into one object, using ld -r, and link that object to the executable, instead of the library. You may or may not need to extract objects, e.g., if the following does not work:

ld -r -o libbeta.o libbeta.a

then do

mkdir x
cd x
ar x ../libbeta.a
ld -r -o ../libbeta.o *.o
cd ..
rm -rf x


Maybe -u func2 would help. See the manual page.

Unfortunately, there doesn't seem to be a --whole-archive option as on GNU.

0

精彩评论

暂无评论...
验证码 换一张
取 消