On Tue, Oct 28, 2014 at 3:34 AM, Wy kevinthesun <kevinthesu...@gmail.com> wrote:
> Finally I tried to test Encoder library as before. I create "Test6" Project
> which only included "Encoder.h" and wrote Makefile.am similarly as Test3:
>
> bin_PROGRAMS = Test6
> Test6_SOURCES = Test6.cpp
>
> Test6_LDFLAGS = -L/home/kevinthefire/workspace/Encoder/src
> Test6_LDADD =  /home/kevinthefire/workspace/Encoder/src/libEncoder.a
>
> AM_CXXFLAGS = -I/home/kevinthefire/workspace/Encoder/src
> AM_LDFLAGS = @Test6_LIBS@ @Test6_LDFLAGS@
> AM_LDADD = @Test6_LDADD@
> CLEANFILES = *~
>
> It gave errors:

[...]
)
> It seems that the compiler couldn't link to GPIOPIn library through Encoder
> library? So I modified Makefile.am of Test6 as:
>
> bin_PROGRAMS = Test6
> Test6_SOURCES = Test6.cpp
>
> Test6_LDFLAGS = -L/home/kevinthefire/workspace/Encoder/src
> -L/home/kevinthefire/workspace/GPIOPin/src
> Test6_LDADD =  /home/kevinthefire/workspace/Encoder/src/libEncoder.a
> /home/kevinthefire/workspace/GPIOPin/src/libGPIOPin.a
>
> AM_CXXFLAGS = -I/home/kevinthefire/workspace/Encoder/src
> -I/home/kevinthefire/workspace/GPIOPin/src
> AM_LDFLAGS = @Test6_LIBS@ @Test6_LDFLAGS@
> AM_LDADD = @Test6_LDADD@
> CLEANFILES = *~
>
> I just added information of GPIOPin library and it compiled well!
>
> Now I am wondering why I can't write Makefile.am of Test6 as simple as
> Test3, but have to list all the library information(GPIOPin and Encoder).
> If my Encoder library includes several libraries I created, writing
> Makefile.am would be trouble.
>

As you have found, the linker needs to be told about all libraries
that are going to contribute to the produced executable. If you find
it time-consuming to keep track of what other libraries a library
requires, you might consider using a program called "pkg-config"
(http://www.freedesktop.org/wiki/Software/pkg-config/), which can
retrieve these dependencies so they can be included in the link
command.

Reply via email to