28

Given some source file test.cpp I would like to create a shared library libtest.so . I am trying to do this within the scope of an automake file however I cannot seem to get this to work.

For example under g++ I do the following:

g++ -shared -fPIC test.cpp -o libtest.so

Then I can create another file that will depend on the shared library as follows:

g++ mytest.cpp libtest.so -o blah

I have read that automake only supports making shared libraries via libtool. I have tried to get my automake script to work as follows but it never seems to produce an .so . The closest I have gotten is for it to produce an .la and .o file:

In configure.ac:

AC_ENABLE_SHARED
AC_DISABLE_STATIC
AC_PROG_LIBTOOL(libtool)

in Makefile.am

lib_LTLIBRARIES=libtest.la
libtest_la_SOURCES=test.cpp
libtest_la_CFLAGS=-fPIC
libtest_la_CPPFLAGS=-fPIC
libtest_la_CXXFLAGS=-fPIC
libtest_la_LDFLAGS= -shared -fPIC

Could someone give me an example of building an .so based on the above?

Agricola
  • 572
  • 1
  • 8
  • 20
skimon
  • 1,149
  • 2
  • 13
  • 26
  • 1
    You should replace AC_PROG_LIBTOOL with LT_INIT – William Pursell Jan 18 '12 at 19:52
  • 3
    Bah... after writing this i realized that the above did in fact create the .so file in a hidden .libs directory of my source directory. Hopefully this helps someone else who wonders about this. – skimon Jan 18 '12 at 19:55
  • 3
    Can someone post the complete examples of the files here? Not the source files, but configure.ac and Makefile.am. I can't make this work using the information in this thread. – Thomas Nyberg Aug 15 '16 at 17:05

1 Answers1

24

If you just put LT_INIT in configure.ac and in Makefile.am, do:

lib_LTLIBRARIES = libtest.la
libtest_la_SOURCES = test.cpp
libtest_la_LDFLAGS = -version-info 0:0:0

you should get a .so. You should not specify -fPIC to CFLAGS, etc. The -version-info specifier is not necessary, but is a good idea.

William Pursell
  • 204,365
  • 48
  • 270
  • 300