📄 lnxlib.rules
字号:
XCOMM $XConsortium: lnxLib.rules /main/13 1996/09/28 16:11:01 rws $XCOMM $XFree86: xc/config/cf/lnxLib.rules,v 3.28.2.3 1997/06/22 10:32:20 dawes Exp $/* * Linux shared library rules (DLL & ELF versions) */#ifndef HasSharedLibraries#define HasSharedLibraries YES#endif#ifndef ForceNormalLib#define ForceNormalLib NO#endif#define SharedOldX NO#if UseElfFormat#if (LinuxCLibMajorVersion >= 5 && LinuxCLibMinorVersion >= 4) || LinuxCLibMajorVersion >= 6#undef SpecialMalloc#define SpecialMalloc NO#undef UseInternalMalloc#define UseInternalMalloc NO#endif/* * #define BaseShLibReqs -lc * * I don't want to use this since the normal ELF executables should * be linked with libc.so. If it is not, i.e., static, the variables in * libc.so which is loaded in because of the other shared libraries * may have different values than the ones in the static ELF * executables. That happens if the binaries are linked with libg.a * or libc_p.a. * * If an ELF executable linked with libg.a or libc_p.a loads a shared * object which needs libc.so via dlopen (), I think it should fail. * It is a very bad idea. The moral story is DON'T USE dlopen () IN * ELF EXECUTABLES LINKED WITH libg.a OR libc_p.a. H.J. * */#define BaseShLibReqs#ifndef SharedDataSeparation#define SharedDataSeparation NO#endif#ifndef SharedCodeDef#define SharedCodeDef /**/#endif#ifndef SharedLibraryDef#define SharedLibraryDef /**/#endif#ifndef ShLibIncludeFile#define ShLibIncludeFile <lnxLib.tmpl>#endif#ifndef SharedLibraryLoadFlags#define SharedLibraryLoadFlags -shared#endif#ifndef PositionIndependentCFlags#define PositionIndependentCFlags -fPIC#endif#ifndef PositionIndependentCplusplusFlags#define PositionIndependentCplusplusFlags -fPIC#endif#ifndef ExtraLoadFlags#if LinuxBinUtilsMajorVersion >= 26#ifdef UseInstalled#if LinuxBinUtilsMajorVersion < 27#define ExtraLoadFlags -Wl,-rpath-link,$(USRLIBDIRPATH)#endif#else#define ExtraLoadFlags -Wl,-rpath-link,$(BUILDLIBDIR)#endif#else#define ExtraLoadFlags -Wl,-rpath,$(USRLIBDIRPATH)#endif#endif/* * InstallSharedLibrary - generate rules to install the shared library. * NOTE: file must be executable, hence "INSTBINFLAGS" */#ifndef InstallSharedLibrary#define InstallSharedLibrary(libname,rev,dest) @@\install:: Concat(lib,libname.so.rev) @@\ MakeDir($(DESTDIR)dest) @@\ $(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so.rev) $(DESTDIR)dest @@\ @T=`echo Concat($(DESTDIR)dest/lib,libname.so.rev) | sed 's/\.[^\.]*$$//'`;\ set -x; $(RM) $$T && $(LN) Concat(lib,libname.so.rev) $$T @@\ $(RM) Concat($(DESTDIR)dest/lib,libname.so) @@\ $(LN) Concat(lib,libname.so.rev) Concat($(DESTDIR)dest/lib,libname.so)#endif /* InstallSharedLibrary *//* * InstallSharedLibraryData - generate rules to install the shared library data */#ifndef InstallSharedLibraryData#define InstallSharedLibraryData(libname,rev,dest)#endif /* InstallSharedLibraryData *//* * SharedLibraryTarget - generate rules to create a shared library; * build it into a different name so that we do not hose people by having * the library gone for long periods. */#ifndef SharedLibraryTarget#ifdef UseInstalled#define LinkBuildSonameLibrary(lib) true#else#define LinkBuildSonameLibrary(lib) (RemoveFile($(BUILDLIBDIR)/lib); \ cd $(BUILDLIBDIR); $(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/lib .)#endif#define SharedLibraryTarget(libname,rev,solist,down,up) @@\AllTarget(Concat(lib,libname.so.rev)) @@\ @@\Concat(lib,libname.so.rev): solist $(EXTRALIBRARYDEPS) @@\ $(RM) $@~ @@\ @SONAME=`echo $@ | sed 's/\.[^\.]*$$//'`; set -x; \ @@\ (cd down; $(CC) -o up/$@~ $(SHLIBLDFLAGS) -Wl,-soname,$$SONAME solist $(REQUIREDLIBS) BaseShLibReqs); \ @@\ $(RM) $$SONAME; $(LN) $@ $$SONAME; \ @@\ LinkBuildSonameLibrary($$SONAME) @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ $(RM) Concat(lib,libname.so) @@\ $(LN) $@ Concat(lib,libname.so) @@\ LinkBuildLibrary($@) @@\ LinkBuildLibrary(Concat(lib,libname.so)) @@\ @@\clean:: @@\ @MAJREV=`expr rev : '\(.*\)\.'`; \ @@\ set -x; $(RM) Concat(lib,libname.so.$$MAJREV) @@\ $(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)#endif /* SharedLibraryTarget */#ifndef SharedDepModuleTarget#define SharedDepModuleTarget(name,deps,solist) @@\AllTarget(name) @@\ @@\name: deps @@\ $(RM) $@~ @@\ $(CC) -o $@~ $(SHLIBLDFLAGS) solist $(REQUIREDLIBS) BaseShLibReqs @@\ $(RM) $@ @@\ $(MV) $@~ $@ @@\ @@\clean:: @@\ $(RM) name#endif /* SharedDepModuleTarget *//* * SharedLibraryDataTarget - generate rules to create shlib data file; */#ifndef SharedLibraryDataTarget#define SharedLibraryDataTarget(libname,rev,salist)#endif /* SharedLibraryTarget */#else /* UseElfFormat */#ifndef SharedDataSeparation#define SharedDataSeparation NO#endif#ifndef SharedCodeDef#define SharedCodeDef /**/#endif#ifndef SharedLibraryDef#define SharedLibraryDef /**/#endif#ifndef ShLibIncludeFile#define ShLibIncludeFile <lnxLib.tmpl>#endif#ifndef SharedLibraryLoadFlags#define SharedLibraryLoadFlags /**/#endif#ifndef PositionIndependentCFlags#define PositionIndependentCFlags -B/usr/bin/jump#endif/* * These definitions are now extended to work with the X sources and * external sources wishing to build shared libs. * * A library can create it's own shlibs (.so) or can be incorporated into * another "host" lib. All libraries generate stub (.sa) files. * A "host" lib does all the work to generate the stubs for itself and its * "guests", invoking the "guest" Makefiles to create the objects for * inclusion into the "host" shlib. A "guest" lib will ask the "host" to * create the stubfiles, then copy its own into its directory. * Most external libs are "host" libs; the concept of "guest" is a holdover * from older libs during the days of scarce shared library address space. * * To create a simple "host" shared lib, Xfoo, define: * * JUMP_ROOT_Xfoo = <source directory> * JUMP_IS_HOST_Xfoo = YES * JUMP_STUBLIBS_Xfoo = libXfoo.sa * JUMP_DIR_Xfoo = $(JUMP_ROOT_Xfoo)/shared <work directory> * JUMP_DEFS_Xfoo = -DFOO <defs for jump files> * JUMP_VARS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_vars <see DLL docs> * JUMP_FUNCS_Xfoo = $(JUMP_ROOT_Xfoo)/jump_funcs <see DLL docs> * JUMP_IGNORE_Xfoo = $(JUMP_ROOT_Xfoo)/jump_ignore <see DLL docs> * JUMP_EXPORT_Xfoo = $(JUMP_DIR_Xfoo)/jump.vars <exported symbols> * JUMP_IMPORT_Xfoo = $(JUMP_EXPORT_Xbar) <imported symbols> * JUMP_ADDRESS_Xfoo = 0xXXXXXXXX <fill in with address> * JUMP_JUMPTABLESIZE_Xfoo = 0x4000 <adjust if necessary> * JUMP_GOTSIZE_Xfoo = 4096 <adjust if necessary> * JUMP_STUBNAMES_Xfoo = libXfoo <and others> * JUMP_STUBS_IMPORT_Xfoo = /usr/lib/libc.sa <and others> * JUMP_LDLIBS_Xfoo = `$(CC) --print-libgcc-file-name` -lc <and others> * * To create a complex "host", you need to add * JUMP_SIBARS_Xt = jump/libXbar.a~ <and others> * These are the archives of the shared objects of the "guest" libs. They * need to be added to the JUMP_LDLIBS_Xfoo lines. * * For further clarification, study the definitions of libXaw, a simple "host" * lib, libXt, a complex "host" lib, and libXmu, one of libXts "guests". * * As a hint of how to start (with the DLL docs), touch jump_vars, jump_funcs * and jump_ignore, then compile. Then massage the jump.vars and jump.funcs * files in the shared subdirectory into jump_xxx files. */#ifndef UseInstalledXCOMM These are only needed to build the server#if LinuxElfDefaultLIBC_SA = /usr/i486-linuxaout/lib/libc.saLIBM_SA = /usr/i486-linuxaout/lib/libm.sa#elseLIBC_SA = /usr/lib/libc.saLIBM_SA = /usr/lib/libm.sa#endifJUMP_LDLIBS_libc = `$(CC) --print-libgcc-file-name` -lcXCOMM libX11.so (X11, SM, ICE)JUMP_ROOT_X11 = $(XLIBSRC)JUMP_IS_HOST_X11 = YESJUMP_STUBLIBS_X11 = libX11.sa libSM.sa libICE.saJUMP_SIBDIRS_X11 = $(JUMP_ROOT_SM) $(JUMP_ROOT_ICE)JUMP_DIR_X11 = $(JUMP_ROOT_X11)/sharedJUMP_DEFS_X11 = $(XDMAUTHDEFS) $(XKB_DEFINES)JUMP_VARS_X11 = $(JUMP_ROOT_X11)/jump_varsJUMP_FUNCS_X11 = $(JUMP_ROOT_X11)/jump_funcsJUMP_IGNORE_X11 = $(JUMP_ROOT_X11)/jump_ignoreJUMP_EXPORT_X11 = $(JUMP_DIR_X11)/jump.varsJUMP_ADDRESS_X11 = 0x60200000JUMP_JUMPTABLESIZE_X11 = 0x4000JUMP_GOTSIZE_X11 = 4096JUMP_STUBNAMES_X11 = libX11 libSM libICEJUMP_STUBS_IMPORT_X11 = $(LIBC_SA)JUMP_SIBARS_X11 = jump/libSM.a~ jump/libICE.a~JUMP_LDLIBS_X11 = $(JUMP_SIBARS_X11) $(JUMP_LDLIBS_libc)XCOMM libSM (part of libX11.so)JUMP_ROOT_SM = $(SMSRC)JUMP_IS_HOST_SM = NOJUMP_HOST_SM = $(JUMP_ROOT_X11)JUMP_DIR_SM = $(JUMP_DIR_X11)XCOMM libICE (part of libX11.so)JUMP_ROOT_ICE = $(ICESRC)JUMP_IS_HOST_ICE = NOJUMP_HOST_ICE = $(JUMP_ROOT_X11)JUMP_DIR_ICE = $(JUMP_DIR_X11)XCOMM libXt.so (Xt, Xmu, Xext, Xi, Xtst, Xp)JUMP_ROOT_Xt = $(TOOLKITSRC)JUMP_IS_HOST_Xt = YESJUMP_STUBLIBS_Xt = libXt.sa libXmu.sa libXext.sa libXi.sa libXtst.sa libXp.saJUMP_SUBDIRS_Xt = $(JUMP_ROOT_X11)JUMP_SIBDIRS_Xt = $(JUMP_ROOT_Xmu) $(JUMP_ROOT_Xext) \ $(JUMP_ROOT_Xi) $(JUMP_ROOT_Xtst) $(JUMP_ROOT_Xp)JUMP_DIR_Xt = $(JUMP_ROOT_Xt)/sharedJUMP_VARS_Xt = $(JUMP_ROOT_Xt)/jump_varsJUMP_FUNCS_Xt = $(JUMP_ROOT_Xt)/jump_funcsJUMP_IGNORE_Xt = $(JUMP_ROOT_Xt)/jump_ignoreJUMP_EXPORT_Xt = $(JUMP_DIR_Xt)/jump.varsJUMP_IMPORT_Xt = $(JUMP_EXPORT_X11)JUMP_ADDRESS_Xt = 0x602a0000JUMP_JUMPTABLESIZE_Xt = 0x4000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -