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.