Why doesn't Libtool want to link with a static library?
Asked Answered
M

1

6

I want to build a shared library that uses ZipArchive using GNU Autotools but I'm having this problem:

Warning: linker path does not have real file for library -lziparch.
I have the capability to make that library automatically link in when
you link to this library.  But I can only do this if you have a
shared version of the library, which you do not appear to have
because I did check the linker path looking for a file starting
with libziparch and none of the candidates passed a file format test
using a file magic. Last file checked: /usr/local/ZipArchive/ZipArchive/libziparch.a
The inter-library dependencies that have been dropped here will be
automatically added whenever a program is linked with this library
or is declared to -dlopen it.

If I build a static library or if I use a shared library of ZipArchive it works but the problem is that the makefile that comes with ZipArchive source code only builds a static library.

How can I force Libtool to link with a static library?

Microbe answered 26/6, 2012 at 10:2 Comment(0)
S
5

Generally, static archives are created with non-pic object files and they cannot be put into shared libraries.

What this message is telling you though, is that when a program links to YOUR library using Libtool, that -lziparch will get added to the link. So you don't need to change anything unless you're building a module for an interpreted language. In that case, you will have to build ZipArchive as a shared library. In addition, this wouldn't work on a platform like MS Windows where shared libraries (DLLs) have to resolve all their symbols at link time.

All that said, if your ziparch static lib is PIC code, you can use the -whole-archive flag when linking it to your library. This would be the least portable solution though.

Saar answered 17/10, 2012 at 16:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.