国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在Linux創建庫函數(8)

2024-07-21 02:37:20
字體:
來源:轉載
供稿:網友

  摘要:下面是一些例子,例子中我們會使用三種函數庫(靜態的、共享的和動態加載的函數庫)。文件libhello.c是一個函數庫,libhello.h是它的頭文件;demo_use.c則是一個使用了libhello函數庫的。 Script_static和script_dynamic分別演示如何以靜態和共享方式使用函數庫,而后面的demo_dynamic.c和script_dynamic則表示演示如何以動態加載函數庫的方式來使用它。
  6. 更多的例子
  
    下面是一些例子,例子中我們會使用三種函數庫(靜態的、共享的和動態加載的函數庫)。文件libhello.c是一個函數庫,libhello.h是它的頭文件;demo_use.c則是一個使用了libhello函數庫的。Script_static和script_dynamic分別演示如何以靜態和共享方式使用函數庫,而后面的demo_dynamic.c和script_dynamic則表示演示如何以動態加載函數庫的方式來使用它。
  
    6.1. File libhello.c
  
  /* libhello.c - demonstrate library use. */
  #include
  void hello(void)
  {
   PRintf("Hello, library world.
  ");
  }
  
    6.2. File libhello.h
  
  /* libhello.h - demonstrate library use. */
  void hello(void);
  
    6.3. File demo_use.c
  
  /* demo_use.c -- demonstrate direct use of the "hello" routine */
  #include "libhello.h"
  int main(void)
  {
   hello();
   return 0;
  }
  
    6.4. File script_static
  
  #!/bin/sh
  # Static library demo
  # Create static library's object file, libhello-static.o.
  # I'm using the name libhello-static to clearly
  # differentiate the static library from the
  # dynamic library examples, but you don't need to use
  # "-static" in the names of your
  # object files or static libraries.gcc -Wall -g -c -o libhello-static.o
  libhello.c
  # Create static library.ar rcs libhello-static.a libhello-static.o
  # At this point we could just copy libhello-static.a
  # somewhere else to use it.
  # For demo purposes, we'll just keep the library
  # in the current Directory.
  # Compile demo_use program file.gcc -Wall -g -c demo_use.c -o demo_use.o
  # Create demo_use program; -L. causes "." to be searched during
  # creation of the program. Note that this command causes
  # the relevant object file in libhello-static.a to be
  # incorporated into file demo_use_static.gcc -g -o demo_use_static
  demo_use.o -L. -lhello-static
  # Execute the program../demo_use_static
  
    6.5. File script_shared
  
  #!/bin/sh
  # Shared library demo
  # Create shared library's object file, libhello.o.gcc -fPIC -Wall
  -g -c libhello.c
  # Create shared library.
  # Use -lc to link it against C library, since libhello
  # depends on the C library.gcc -g -shared -Wl,-soname,libhello.so.0 -o
  libhello.so.0.0 libhello.o -lc# At this point we could just copy
  libhello.so.0.0 into
  # some directory, say /usr/local/lib.
  # Now we need to call ldconfig to fix up the symbolic links.
  # Set up the soname. We could just execute:
  # ln -sf libhello.so.0.0 libhello.so.0
  # but let's let ldconfig figure it out./sbin/ldconfig -n .
  # Set up the linker name.
  # In a more sophisticated setting, we'd need to make
  # sure that if there was an existing linker name,
  # and if so, check if it should stay or not.ln -sf libhello.so.0
  libhello.so
  # Compile demo_use program file.gcc -Wall -g -c demo_use.c -o
  demo_use.o
  # Create program demo_use.
  # The -L. causes "." to be searched during creation
  # of the program; note that this does NOT mean that "."
  # will be searched when the program is executed.gcc -g -o demo_use
  demo_use.o -L. -lhello
  # Execute the program. Note that we need to tell the program
  # where the shared library is,
  using LD_LIBRARY_PATH.LD_LIBRARY_PATH="." ./demo_use
  
    6.6. File demo_dynamic.c
  
  /* demo_dynamic.c -- demonstrate dynamic loading and
   use of the "hello" routine */
  /* Need dlfcn.h for the routines to
   dynamically load libraries */
  #include
  #include
  #include
  /* Note that we don't have to include "libhello.h".
   However, we do need to specify something related;
   we need to specify a type that will hold the value
   we're going to get from dlsym(). */
  /* The type "simple_demo_function" describes a function that
   takes no arguments, and returns no value: */
  typedef void (*simple_demo_function)(void);
  int main(void)
  {
   const char *error;
   void *module;
   simple_demo_function demo_function;
   /* Load dynamically loaded library */
   module = dlopen("libhello.so", RTLD_LAZY);
   if (!module)
   {
   fprintf(stderr, "Couldn't open libhello.so: %s
  ",dlerror());
   exit(1);
   }
   /* Get symbol */
   dlerror();
   demo_function = dlsym(module, "hello");
   if ((error = dlerror()))
   {
   fprintf(stderr, "Couldn't find hello: %s
  ", error);
   exit(1);
   }
   /* Now call the function in the DL library */
   (*demo_function)();
   /* All done, close things cleanly */
   dlclose(module);
   return 0;
  }
  
    6.7. File script_dynamic
  
  #!/bin/sh
  # Dynamically loaded library demo
  # Presume that libhello.so and friends have
  # been created (see dynamic example).
  # Compile demo_dynamic program file into an object file.gcc
  -Wall -g -c demo_dynamic.c
  # Create program demo_use.
  # Note that we don't have to tell it where to search
  for DL libraries,
  # since the only special library this program uses won't be
  # loaded until after the program starts up.
  # However, we DO need the option -ldl to include the library
  # that loads the DL libraries.gcc -g -o demo_dynamic
  demo_dynamic.o -ldl
  # Execute the program. Note that we need to tell the
  # program where get the dynamically loaded library,
  # using LD_LIBRARY_PATH.LD_LIBRARY_PATH="." ./demo_dynamic
  
    by luster(luster@linuxaid.com.cn,hwang@ustc.edu)
  
    2001-8-22
  
   ?。ㄍ辏?br />  
    任何bug發信給我,一起修改。
先謝謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固镇县| 太谷县| 南昌县| 麦盖提县| 增城市| 白水县| 桐城市| 铜川市| 太仆寺旗| 信宜市| 蓝山县| 延边| 阳曲县| 大港区| 阿荣旗| 本溪市| 特克斯县| 新建县| 贵港市| 昌吉市| 田林县| 西宁市| 舒兰市| 锦屏县| 高尔夫| 辽中县| 北流市| 合川市| 鹤庆县| 霍林郭勒市| 筠连县| 斗六市| 白银市| 稷山县| 西和县| 全南县| 重庆市| 汤原县| 北票市| 舒兰市| 北票市|