Den 2011-03-21 07:36 skrev Satz Klauer: > Hi, > > I try to use libtool to limit the number of symbols exported by a > shared library. My previous call to create this library looked like > this and worked fine: > > g++ -shared -o ../libmylib.so libmylib.o -pthread -ldl > > Now I modified it so that my resulting libmylib.so only exports > symbols that start with mylib_ : > > libtool --mode=link g++ -shared -o ../libmylib.so libmylib.o > -pthread -ldl -export-symbols-regex mylib_ > > But despite the keyword "shared" now libtool complains about a missing > function main(), means it tries to create an executable program > instead of a shared library. > > What am I doing wrong here?
-shared is not how you tell libtool to build a shared library (and you do not want to build a shared library behind the back of libtool by manually passing -shared to g++, that would defeat the purpose of libtool). You need to specify "-rpath /where/to/install" to make libtool build what is called a "libtool library". If a "libtool library" ends up shared, static or both depends on the system and on how libtool was configured (see configure options --disable-shared and --disable-static). You also want to link with .lo files instead of .o files, i.e. "libtool objects" instead of ordinary plain old objects. "Libtool objects" are created with e.g. "libtool --mode=compile g++ -o foo.lo foo.cpp" instead of plain old "g++ -o foo.o foo.cpp" So, libtool --mode=compile g++ -o libmylib.lo libmylib.cpp libtool --mode=link g++ -o ../libmylib.la libmylib.lo -pthread -ldl -export-symbols-regex mylib_ -rpath /usr/local/lib might work better (untested) Cheers, Peter _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool