I am creating a utility which depends on libassuan
aside other depends. While these ‘others’ provide shared libraries, libassuan
comes with static one only.
libassuan
comes with simple libassuan-config
tool which is meant to provide CFLAGS
& LDFLAGS
for the compiler/linker to use. These LDFLAGS
refer to the library as -lassuan
.
The result of standard call of make is then:
cc -I/usr/include/libmirage -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lmirage -lglib-2.0 -L/usr/lib64 -lassuan -o mirage2iso mirage2iso.c mirage-getopt.o mirage-wrapper.o mirage-password.o mirage-password.o: In function `mirage_input_password': mirage-password.c:(.text+0x1f): undefined reference to `assuan_pipe_connect' mirage-password.c:(.text+0x32): undefined reference to `assuan_strerror' collect2: ld returned 1 exit status make: *** [mirage2iso] Error 1
(I've just started writing this unit and that's why there aren't more errors)
So, if I understand the result correctly, gcc doesn't want to link the app to libassuan.a
.
Using -static
here will cause gcc to prefer static libraries over shared which is unindented. I've seen solution suggesting using something like that:
-Wl,-Bstatic -lassuan -Wl,-Bdynamic
but I don't think it would be a portable one.
I think the best solution would be to provide full path to the static library file but libassuan-config
doesn't provide much of help (all I can get from it is -L/usr/lib64 -lassuan
).
Maybe I should just try to create the static library path by ‘parsing’ returned LDFLAGS
and using -L
for the directory name and -l
for the library name — and then hoping that in all cases libassuan-config
will return it like that.
What do you think about that? Is there any good, simple and portable solution to resolve the issue?
PS. Please note that although I'm referring to gcc here, I would like to use something that will work fine with other compilers.
PS2. One additional question: if package does install static library only, returning such LDFLAGS
instead of full .la
path can be considered as a bug?