⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mklib

📁 MesaForMona的优点相信大家有目共睹
💻
📖 第 1 页 / 共 2 页
字号:
#!/bin/sh# Make a shared library.# Basically do a switch/case depending on the OS and make a shared (or static)# library conforming to that OS.# Usage:#   mklib [options] objects ...# Options:#   -o LIBRARY    specifies the name of resulting library#                 ("-o GL" for example, might result in "libGL.so" being made)#   -major N      specifies major version number (default is 1)#   -minor N      specifies minor version number (default is 0)#   -patch N      specifies patch version number (default is 0)#   -lLIBRARY     specifies a dependency on LIBRARY#   -LDIR         search in DIR for library dependencies#   -cplusplus    link with C++ runtime#   -static       make a static library (default is dynamic/shared)#   -install DIR  move resulting library file(s) to DIR#   -arch ARCH    override using `uname` to determine architecture#   -archopt OPT  specify an extra achitecture-specific option OPT#   -noprefix     don't prefix library name with "lib" or any suffix## The library name should just be "GL" or "GLU", etc.  The 'lib' prefix# will be added here if needed, as well as the ".so" or ".a" suffix,# etc (unless the -noprefix option is used).## objects should be:  foo.o bar.o etc.o## Environment variables recognized:#   CC   C compiler command#   CXX  C++ compiler command### Option defaults#LIBNAME=""MAJOR=1MINOR=0PATCH=""DEPS=""CPLUSPLUS=0STATIC=0INSTALLDIR="."ARCH="auto"ARCHOPT=""NOPREFIX=0## Parse arguments#while truedo    case $1 in	'-o')         shift 1; LIBNAME=$1;;	'-major')     shift 1; MAJOR=$1;;	'-minor')     shift 1; MINOR=$1;;	'-patch')     shift 1; PATCH=$1;;	-l*)          DEPS="$DEPS $1";;	-L*)          DEPS="$DEPS $1";;	'-cplusplus') CPLUSPLUS=1;;	'-static')    STATIC=1;;	'-install')   shift 1; INSTALLDIR=$1;;	'-arch')      shift 1; ARCH=$1;;	'-archopt')   shift 1; ARCHOPT=$1;;	'-noprefix')  NOPREFIX=1;;	-*)           echo "mklib: Unknown option: " $1 ; exit 1;;	*) break    esac    shift 1doneOBJECTS=$@if [ ${MONADIR} != "" ] ; then    ARCH="Mona"elif [ ${ARCH} = "auto" ] ; then    ARCH=`uname`fi## Error checking#if [ "x${LIBNAME}" = "x" ] ; then    echo "mklib: Error: no library name specified"    exit 1fiif [ "x${OBJECTS}" = "x" ] ; then    echo "mklib: Error: no object files specified"    exit 1fi## Debugging info#if [  ]  ; then    echo "-----------------"    echo ARCH is $ARCH    echo LIBNAME is $LIBNAME    echo MAJOR is $MAJOR    echo MINOR is $MINOR    echo PATCH is $PATCH    echo DEPS are $DEPS    echo "-----------------"fi## OK, make the library now#case $ARCH in    'Linux' | 'OpenBSD')	# GCC-based environment	# Set default compilers if env vars not set	if [ "x$CXX" = "x" ] ; then	    CXX=g++	fi	if [ "x$CC" = "x" ] ; then	    CC=gcc	fi	if [ $NOPREFIX = 1 ] ; then	    # No "lib" or ".so" part	    echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}	    #OPTS="-shared -Wl,-soname,${LIBNAME}"  # soname???	    OPTS="-shared"            if [ $CPLUSPLUS = 1 ] ; then                LINK=$CXX            else                LINK=$CC            fi            rm -f ${LIBNAME}            # make lib            ${LINK} ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}            # finish up            FINAL_LIBS="${LIBNAME}"        elif [ $STATIC = 1 ] ; then	    LIBNAME="lib${LIBNAME}"     # prefix with "lib"            echo "mklib: Making" $ARCH "static library: " ${LIBNAME}.a            LINK="ar"            OPTS="-ru"            # make lib            ${LINK} ${OPTS} ${LIBNAME}.a ${OBJECTS}	    ranlib ${LIBNAME}.a            # finish up            FINAL_LIBS=${LIBNAME}.a        else	    LIBNAME="lib${LIBNAME}"     # prefix with "lib"	    if [ $ARCH = 'Linux' ] ; then		OPTS="-Xlinker -Bsymbolic -shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"	    else		OPTS="-shared -Wl,-soname,${LIBNAME}.so.${MAJOR}"	    fi	    if [ x${PATCH} = "x" ] ; then		VERSION="${MAJOR}.${MINOR}"	    else		VERSION="${MAJOR}.${MINOR}.${PATCH}"	    fi            echo "mklib: Making" $ARCH "shared library: " ${LIBNAME}.so.${VERSION}            if [ $CPLUSPLUS = 1 ] ; then                LINK=$CXX            else                LINK=$CC            fi            # rm any old libs            rm -f ${LIBNAME}.so.${VERSION}            rm -f ${LIBNAME}.so.${MAJOR}            rm -f ${LIBNAME}.so            # make lib            ${LINK} ${OPTS} -o ${LIBNAME}.so.${VERSION} ${OBJECTS} ${DEPS}            # make usual symlinks            ln -s ${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR}            ln -s ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so            # finish up            FINAL_LIBS="${LIBNAME}.so.${VERSION} ${LIBNAME}.so.${MAJOR} ${LIBNAME}.so"        fi	;;    'SunOS')        if [ $STATIC = 1 ] ; then	    LIBNAME="lib${LIBNAME}.a"	    echo "mklib: Making SunOS static library: " ${LIBNAME}	    rm -f ${LIBNAME}	    ar -ruv ${LIBNAME} ${OBJECTS}	    FINAL_LIBS=${LIBNAME}	else	    LIBNAME="lib${LIBNAME}.so"	    echo "mklib: Making SunOS shared library: " ${LIBNAME}	    # XXX OPTS for gcc should be -shared, but that doesn't work.	    # Using -G does work though.	    if [ $CPLUSPLUS = 1 ] ; then		# determine linker and options for C++ code		if [ "x${CXX}" = "xg++" ] ; then		    # use g++		    LINK="g++"		    OPTS="-G"		elif [ "x${CXX}" = "xCC" ] ; then		    # use Sun CC		    LINK="CC"		    OPTS="-G"		elif [ "x${CXX}" = "xc++" ] ; then		    # use Sun c++		    LINK="c++"		    OPTS="-G"		elif [ `which c++` ] ; then		    # use Sun c++		    LINK="c++"		    OPTS="-G"		elif [ `type g++` ] ; then		    # use g++		    LINK="g++"		    OPTS="-G"		else		    echo "mklib: warning: can't find C++ comiler, trying CC."		    LINK="CC"		    OPTS="-G"		fi	    elif [ "x${CC}" = "xgcc" ] ; then		# use gcc for linking		LINK="gcc"		OPTS="-G"	    else		# use native Sun linker		LINK="ld"		OPTS="-G"	    fi	    echo "mklib: linker is" ${LINK} ${OPTS}	    rm -f ${LIBNAME}.${MAJOR} ${LIBNAME}	    ${LINK} ${OPTS} -o ${LIBNAME}.${MAJOR} ${OBJECTS} ${DEPS}	    ln -s ${LIBNAME}.${MAJOR} ${LIBNAME}	    FINAL_LIBS="${LIBNAME}.${MAJOR} ${LIBNAME}"	fi	;;    'FreeBSD')	if [ $NOPREFIX = 1 ] ; then	    # No "lib" or ".so" part	    echo "mklib: Making FreeBSD shared library: " ${LIBNAME}	    rm -f ${LIBNAME}	    ld -Bshareable -o ${LIBNAME} ${OBJECTS}	    FINAL_LIBS=${LIBNAME}        elif [ $STATIC = 1 ] ; then	    STLIB="lib${LIBNAME}.a"	    echo "mklib: Making FreeBSD static library: " ${STLIB}	    rm -f ${STLIB}	    ar cq ${STLIB} ${OBJECTS}	    ranlib ${STLIB}	    FINAL_LIBS=${STLIB}	else	    SHLIB="lib${LIBNAME}.so.${MAJOR}.${MINOR}"	    echo "mklib: Making FreeBSD shared library: " ${SHLIB}	    rm -f ${SHLIB}	    ld -Bshareable -o ${SHLIB} ${OBJECTS}	    # XXX make lib${LIBNAME}.so.${MAJOR} symlink?	    FINAL_LIBS=${SHLIB}	fi	;;    'NetBSD')        if [ $STATIC = 1 ] ; then	    LIBNAME="lib${LIBNAME}_pic.a"	    echo "mklib: Making NetBSD PIC static library: " ${LIBNAME}	    rm -f ${LIBNAME}	    ar cq ${LIBNAME} ${OBJECTS}	    ranlib ${LIBNAME}	    FINAL_LIBS=${LIBNAME}	else	    LIBNAME="lib${LIBNAME}.so.${MAJOR}.${MINOR}"	    echo "mklib: Making NetBSD PIC shared library: " ${LIBNAME}	    rm -f ${LIBNAME}	    ld -x -Bshareable -Bforcearchive -o ${LIBNAME} ${OBJECTS}	    FINAL_LIBS=${LIBNAME}	fi	;;    'IRIX' | 'IRIX64')        if [ $STATIC = 1 ] ; then	    LIBNAME="lib${LIBNAME}.a"	    rm -f ${LIBNAME}	    ar rc ${LIBNAME} ${OBJECTS}	    FINAL_LIBS=${LIBNAME}	else	    LIBNAME="lib${LIBNAME}.so"  # prefix with "lib", suffix with ".so"	    if [ $ARCHOPT = "64" ] ; then		# 64-bit ABI		OPTS="-64 -shared -all"		echo "mklib: Making IRIX 64-bit shared library: " ${LIBNAME}	    elif [ $ARCHOPT = "o32" ] ; then		# old 32-bit ABI		OPTS="-32 -shared -all"		echo "mklib: Making IRIX o32-bit shared library: " ${LIBNAME}	    else		# new 32-bit ABI		OPTS="-n32 -shared -all"		echo "mklib: Making IRIX n32-bit shared library: " ${LIBNAME}	    fi	    if [ $CPLUSPLUS = 1 ] ; then		LINK="CC"	    else		LINK="ld"	    fi	    ${LINK} ${OPTS} -o ${LIBNAME} ${OBJECTS} ${DEPS}	    FINAL_LIBS=${LIBNAME}	fi	;;    'linux-cygwin')	LIBNAME="lib${LIBNAME}.a"	echo "mklib: Making linux-cygwin library: " ${LIBNAME}	rm -f ${LIBNAME}	gnuwin32ar ruv ${LIBNAME} ${OBJECTS}	FINAL_LIBS=${LIBNAME}	;;    'HP-UX')        if [ $STATIC = 1 ] ; then	    LIBNAME="lib${LIBNAME}.a"	    echo "mklib: Making HP-UX static library: " ${LIBNAME}	    rm -f ${LIBNAME}	    ar -ruv ${LIBNAME} ${OBJECTS}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -