libtools生成so的时候,发现在rhel5.3和fedora15下,结果竟然不一样,Makefile.am这样写道:
dydir = $(bindir)/pwd在fedora15下,这里面dy.cpp里面必须包括main函数,否则编译不过,而rhel5.3则没有这个问题,查了过程发现fedora15和rhel5.3的编译过程分别如下所示:
dy_PROGRAMS = libdy.so
libdy_so_SOURCES = dy.cpp dy.h
libdy_so_CXXFLAGS = -fPIC
libdy_so_LDFLAGS = -shared -fpic
fedora15:和
/bin/sh ../../../libtool --tag=CXX --mode=link g++ -fPIC -g -O2 -shared -fpic -o libdy.so libdy_so-dy.o
libtool: link: g++ -fPIC -g -O2 -fpic -o libdy.so libdy_so-dy.o
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
rhel5.3应该是libtool在fedora15上丢失了-shared参数所致,fedora15的libtool版本为2.4,而rhel5.3的libtool版本为1.5.22。
/bin/sh ../../../libtool --tag=CXX --mode=link g++ -g -O2 -o libdy.so -shared -fpic libdy_so-dy.o
g++ -g -O2 -o libdy.so -shared -fpic libdy_so-dy.o