library_library ieee - CSDN
  • Library

    2014-12-03 23:42:39
    将一个应用打包为Library 设置工程A,右键->Properties->Android,将Is library项选中,然后Apply。 另外一个应用实现 设置工程B,右键->Properties->Android,在Library中,点击Add按 钮,将A工程加入,...

    将一个应用打包为Library  

    设置工程A,右键->Properties->Android,将Is library项选中,然后Apply。

    另外一个应用实现

    设置工程B,右键->Properties->Android,在Library中,点击Add按 钮,将A工程加入,然后Apply。此时在B中就引入了A中的资源和代码,这些资源和代码都可以直接调用。需要注意的是,因为A已经不再是一个完整的 Android应用,而是一个类库工程,所以有一些内容还需要在B中配置一下。比如A中有lib库引用,则B中也要加入该lib库;比如A中的 AndroidManifest.xml文件的内容,在B的AndroidManifest.xml文件中也要相应加上。。。



    二、引用Library库项目:
     
    右键项目文件夹,点击Properties,选择Android,然后点击Add,选择你的库项目,然后Apply,OK。
     
    需要注意的是,在你的项目AndroidManifest.xml中仍然需要声明库项目中需要用到的activity、service、receiver等组件。












    展开全文
  • Linux中的库(Library

    千次阅读 2018-08-27 09:03:35
    一、库文件 库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。在库中的函数是相互关联的,通过这些函数的组成可以实现相应的功能,如屏幕处理函数库(curses和ncurses库)、数据库访问例程...

    一、库文件

    库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的。在库中的函数是相互关联的,通过这些函数的组成可以实现相应的功能,如屏幕处理函数库(curses和ncurses库)、数据库访问例程(dbm库)。
    在Linux中,标准的库文件一般存放在/lib和usr/lib的目录中。c语言编译器gcc(更确切的说是链接程序)需要知道要搜索哪些库文件,因为默认情况下,它只搜索标准C语言库。仅仅把库文件放在标准目录中就希望C语言编译器gcc能够找到它是不够的,库文件必须遵循特定的命名规范并且需要在命令行中明确指定。
    gcc -o hello hello.c /usr/lib/libm.a
    1.库文件的名字总是以lib开头,随后分别指明这是什么库(如c代表C语言库,m代表数学库);
    2. .a 代表传统的静态函数库
    3. .so 代表共享函数库
    4. 函数库通常以静态库和共享库两种格式存在,可以通过完整的库文件路径名或用-l标志来告诉C语言编译器gcc要搜索的库文件,如gcc -o hello hello.c /usr/lib/libm.a命令要求在编译hello.c源文件编译成hello的可执行文件的过程中,编译器除了会搜索标准的C语言函数库以外,还会搜索数学库以解决函数引用的问题。gcc -o hello hello.c -lm命令是命令gcc -o hello hello.c /usr/lib/libm.a的简写方式,-lm标志代表的是标准库目录中名为libm.a的函数库,同时使用-lm标志另一个好处是如果有共享库,编译器会自动选择共享库。
    5. 虽然库文件和头文件一样,通常都保存在标准位置,但是我们可以通过使用-L标志为gcc编译器增加库的搜索路径。如gcc -o hello -L/usr/hello/lib hello.c -lm这条命令是用/usr/hello/lib目录中的libm库来编译和链接可执行程序hello。

    二、静态库

    静态库,保存在/lib和/usr/lib目录中,也叫归档文件(archive),以.a结尾。使用ar(代表archive,即建立归档文件)程序和使用gcc -c命令对函数分别进行编译。
    在Linux中如何创建静态库?

    1. 为两个函数分别创建各自的源文件(fred.c、 bill.c)
      fred.c源代码:
    #include<stdio.h>
    
    void fred(int arg)
    {
      printf("fred: we passed %d\n",arg);
    }

    bill.c源代码:

    #include<stdio.h>
    
    void bill(char *arg)
    {
       printf("bill:we passed %s\n",arg);
    }

    2.编译这些文件以产生要包含在库文件中的目标文件,可以通过调用-c选项的C语言编译器gcc来阻止编译器创建一个完整的可执行程序。
    gcc -c bill.c fred.c
    ls *.o
    输出:bill.o fred.o
    3.创建库文件的头文件(lib.h)
    库文件的头文件lib.h:

    void bill(char *);
    
    void fred(int);

    该头文件将声明库文件中的函数,同时该头文件需要被可执行程序所包含,把该头文件包含在源文件fred.c和bill.c中可以帮助编译器发现所有错误。
    4.创建调用程序(program.c)
    program.c源文件:

    #include <stdlib.h>
    #include "lib.h"
    
    int main()
    {
         bill("Hello World");
         exit(0);
    }

    5.编译,测试该程序
    gcc -c program.c
    gcc -o program program.o bill.o
    ./program
    输出:
    we passed Hello world
    首先使用gcc -c program.c命令将program.c文件编译成program.o的目标文件,然后再用gcc -o program program.o bill.o命令将 program.o目标文件和 bill.o目标文件链接起来,最后用./program运行名为program的可执行程序。
    6.创建一个静态库文件
    ar crv libfoo.a bill.o fred.o
    输出:
    a - bill.o
    a - fred.o
    ar crv libfoo.a bill.o fred.o命令是创建一个归档文件(静态库)并将名为bill.o、fred.o目标文件添加到名为libfoo的归档文件中,ar程序是将若干个单独的文件归并到一个大的文件中以创建归档文件或集合。当然,ar程序也可以创建任何类型文件的归档文件。
    7.为函数库生成一个内容表
    ranlib libfoo.a
    使用ranlib libfoo.a命令可以为 libfoo库生成一个内容表。在Linux中,使用GNU的软件开发工具是,这个步骤并不是必须的,做了也没关系。
    8.使用静态函数库
    方法一:
    gcc -o program program.o libfoo.a
    ./program
    输出:
    bill:we passed Hello World
    使用gcc -o program program.o libfoo.a命令是将目标文件 program.o和库文件libfoo.a链接起来生成名为program的可执行程序。
    方法二:
    gcc -o program program.o -L. -lfoo
    gcc -o program program.o -L. -lfoo命令中的-L.选项是告诉编译器gcc在当前目录中查找函数库,-lfoo选项是告诉编译器使用名为libfoo.a的函数库。
    9.查看哪些函数包含在目标文件、函数库、可执行文件中
    查看目标文件中包含了哪些函数的命令:
    nm program.o
    查看函数库中包含了哪些函数的命令:
    nm libfoo.a
    查看可执行程序中包含了哪些函数的命令
    nm program
    10.Linux和Windows的区别

    项目 Linux Windows
    目标文件 func.o FUNC.OBJ
    静态函数库 lib.a LIB.LIB
    可执行程序 program PROGRAM.EXE

    11.静态库的缺点
    当同时运行多个应用程序并且它们都使用同一个静态库中的函数时,内存中就会有同一个函数的多份副本,而且程序文件自身也有多份同样的副本。这会消耗大量宝贵的内存和磁盘空间。

    三、共享库

    共享库,保存位置和静态库一致,都是在/lib和/usr/lib目录中,后缀名为.so,标准数学共享库为/usr/lib/libm.so。
    共享库如何链接?
    库本身不再包含函数代码,而是引用运行时可访问的共享代码。当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载到内存中。
    共享库优点:
    1.系统可以值保留共享库的一份副本供许多应用程序同时使用,并且磁盘上也仅保存一份。
    2.共享库的更新可以独立于依赖它的应用程序。如(/lib/libm.so.N,其中N代表主版本号)
    动态装载器

    动态装载器负责装载共享库并解析客户程序函数引用的程序。在Linux中动态装载器可能是ld.so、ld-linux.so.2、ld-lsb.so.2或ld-lsb.so.3。
    搜索共享库的额外位置
    可以在/etc/id.so.conf文件中配置,修改之后执行命令ldconfig来处理它。(如安装了X视窗系统后需要添加X11共享库)
    查看一个程序需要的共享库
    ldd program
    输出:
    linux-gate.so.1 => (0xb76e2000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb751a000)
    /lib/ld-linux.so.2 (0xb76e3000)
    根据输出可以看到,标准C语言函数库(libc)是共享库,程序需要的是主版本号6.
    Linux中的共享库和windows中的动态库
    Linux中的共享库后缀名为.so,windows中的动态库后缀名为.DLL,它们都是在程序运行时加载。

    展开全文
  • 经过前端框架的迅猛发展,大家开始慢慢对模块化习以为常但却不知道通过script引入和require(import)引入的区别。如何引入取决于之前如何导出,在重构一个验证码老项目时,不知如何把项目导出为可通过script引入后...

    经过前端框架的迅猛发展,大家开始慢慢对模块化习以为常但却不知道通过script引入和require(import)引入的区别。如何引入取决于之前如何导出,在重构一个验证码老项目时,不知如何把项目导出为可通过script引入后使用内部方法?

    情景简化为如下:

    • 插件代码
    import {util} from 'util'
    import styles from 'css'
    export function initA(){
        console.log('it is init')
        ...
    }
    • 通过常见webpack打包为bundle.js,在html中引入
    <script src="bundle.js"></script>
    <script>
    //在这里想要调用内部initA方法,报错initA undefined
    initA()
    </script>

    分析原因

    页面报错initA undefined,显然此时调用initA,代表在window对象上面寻找initA方法,因为模块化开发,杜绝一切全局变量,所以在全局找不到该对象,它是局部变量,打包之后代码简化如下:

    (function(module, exports, __webpack_require__) {
    "use strict";
    Object.defineProperty(exports, "__esModule", {
        value: true
    });
    exports.initA = initA;
    function initA() {
        console.log('it is initA');
    }
    })

    那如何可以导出变量并挂载在全局对象之下,看下常见的jquery是如何操作的

    //jQuery 1.2.6(新版已经支持模块化)
    var _jQuery = window.jQuery,
            _$ = window.$;
        var jQuery = window.jQuery = window.$ = function( selector, context ) {
            // The jQuery object is actually just the init constructor 'enhanced'
            return new jQuery.fn.init( selector, context );
        };

    经过多番寻找在webpack配置中用output.libraryTarget参数可以配置输出模块规范。

    webpack libraryTarget 参数说明

    官网说明中叙述libraryTarget 有如下参数可选:(不指定 output.library 将取消这个 “var” 配置)中文说明

    • libraryTarget: “var”(default)
      output.library 会将值作为变量声明导出(当使用 script 标签时,其执行后在全局作用域可用)。
    • libraryTarget: “window”
      当 library 加载完成,入口起点的返回值将分配给 window 对象。
    window["MyLibrary"] = _entry_return_;
    // 使用者将会这样调用你的 library:
    window.MyLibrary.doSomething();
    • libraryTarget: “assign”
    • libraryTarget: “this”
    • libraryTarget: “global”
    • libraryTarget: “commonjs”
      当 library 加载完成,入口起点的返回值将分配给 exports 对象。这个名称也意味着模块用于 CommonJS 环境
    exports["MyLibrary"] = _entry_return_;
    // 使用者将会这样调用你的 library:
    require("MyLibrary").doSomething();
    • libraryTarget: “commonjs2”
    • libraryTarget: “amd”
    • libraryTarget: “umd”
      这是一种可以将你的 library 能够在所有的模块定义下都可运行的方式(并且导出的完全不是模块)。它将在 CommonJS, AMD 环境下运行,或将模块导出到 global 下的变量
      最终输出:
    (function webpackUniversalModuleDefinition(root, factory) {
      if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory();
      else if(typeof define === 'function' && define.amd)
        define([], factory);
      else if(typeof exports === 'object')
        exports["MyLibrary"] = factory();
      else
        root["MyLibrary"] = factory();
    })(this, function() {
      //这个模块会返回你的入口 chunk 所返回的
    });
    • libraryTarget: “jsonp”

    对比var,window,global,umd区别

    由于浏览器环境和node环境的区别,所以产生了window(客服端浏览器)和global(node服务端)的区别。
    我理解的var即在script导入时和window一致,是否可以通过import导入,导入之后的使用还待解释。
    umd即支持所有情况的自定义。
    总的说设置library即在当前环境的全局引入库文件。

    externals的简单使用

    那externals又是如何使用的?和模块导出有什么区别?
    先看定义:externals 配置选项提供了「从输出的 bundle 中排除依赖」的方法。也就是说webpack打包时不会把库打入bundle中,所以需要开发者在html中通过script标签引入。
    例如,从 CDN 引入 jQuery,而不是把它打包:

    index.html

    <script src="https://code.jquery.com/jquery-3.1.0.js"
      integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
      crossorigin="anonymous"></script>

    webpack.config.js

    externals: {
      jquery: 'jQuery'
    }

    有心的同学可能要想了,我都从script标签引入了那么全局就都可以使用了,为什么还要设置这个配置呐?
    为了不改动原来的依赖模块!如下

    import $ from 'jquery';
    
    $('.my-element').animate(...);

    具有外部依赖(external dependency)的 bundle 可以在各种模块上下文(module context)中使用,例如 CommonJS, AMD, 全局变量和 ES2015 模块。这里所说的模式就是上文libraryTarget的模式。
    外部 library 可能是以下任何一种形式:

    • root - 外部 library 能够作为全局变量使用。用户可以通过在 script 标签中引入来实现。这是 externals 的默认设置。
    • commonjs - 用户(consumer)应用程序可能使用 CommonJS 模块系统,因此外部 library 应该使用 CommonJS 模块系统,并且应该是一个 CommonJS 模块。
    • commonjs2 - 类似上面几行,但导出的是 module.exports.default。
    • amd - 类似上面几行,但使用 AMD 模块系统。
    展开全文
  • R语言中library()和require()的区别

    千次阅读 2017-08-06 15:59:20
    While I was sitting in a conference room at UseR! 2014, I started counting the number of times that require() was used in the presentations, and would rant about it after I counted to ten....

    While I was sitting in a conference room at UseR! 2014, I started counting the number of times that require() was used in the presentations, and would rant about it after I counted to ten. With drums rolling, David won this little award (sorry, I did not really mean this to you).

    After I tweeted about it, some useRs seemed to be unhappy and asked me why. Both require() and library() can load (strictly speaking, attach) an R package. Why should not one use require()? The answer is pretty simple. If you take a look at the source code of require (use the source, Luke, as Martin Mächler mentioned in his invited talk), you will see that require() basically means “try to load the package using library() and return a logical value indicating the success or failure”. In other words, library() loads a package, and require() tries to load a package. So when you want to load a package, do you load a package or try to load a package? It should be crystal clear.

    One bad consequence of require() is that if you require('foo') in the beginning of an R script, and use a function bar() in the foo package on line 175, R will throw an error object “bar” not found if foo was not installed. That is too late and sometimes difficult for other people to understand if they use your script but are not familiar with the foopackage – they may ask, what is the bar object, and where is it from? When your code is going to fail, fail loudly, early, and with a relevant error message. require() does not signal an error, and library() does.

    Sometimes you do need require() to use a package conditionally (e.g. the sun is not going to explode without this package), in which case you may use an if statement, e.g.

    if (require('foo')) {
      awesome_foo_function()
    } else {
      warning('You missed an awesome function')
    }
    

    That should be what require() was designed for, but it is common to see R code like this as well:

    if (!require('foo')) {
      stop('The package foo was not installed')
    }
    

    Sigh.

    • library('foo') stops when foo was not installed
    • require() is basically try(library())

    Then if (!require('foo')) stop() is basically “if you failed to try to load this package, please fail”. I do not quite understand why it is worth the circle, except when one wants a different error message with the one from library(), otherwise one can simply load and fail.

    There is one legitimate reason to use require(), though, and that is, “require is a verb and library is a noun!” I completely agree. require should have been a very nice name to choose for the purpose of loading a package, but unfortunately… you know.

    If you take a look at the StackOverflow question on this, you will see a comment on “package vs library” was up-voted a lot of times. It used to make a lot of sense to me, but now I do not care as much as I did. There have been useRs (including me up to a certain point) desperately explaining the difference between the two terms package and library, but somehow I think R’s definition of a library is indeed unusual, and the function library()makes the situation worse. Now I’m totally fine if anyone calls my packages “libraries”, because I know what you mean.

    Karthik Ram suggested this GIF to express “Ah a new library, but requireNoooooo“:

    Since you have read the source code, Luke, you may have found that you can abuse require() a bit, for example:

    > (require(c('MASS', 'nnet')))
    c("Loading required package: c", "Loading required package: MASS",
      "Loading required package: nnet")
    Failed with error:  ‘'package' must be of length 1’
    In addition: Warning message:
    In if (!loaded) { :
      the condition has length > 1 and only the first element will be used
    [1] FALSE
    
    > (require(c('MASS', 'nnet'), character.only = TRUE))
    c("Loading required package: MASS", "Loading required package: nnet")
    Failed with error:  ‘'package' must be of length 1’
    In addition: Warning message:
    In if (!loaded) { :
      the condition has length > 1 and only the first element will be used
    [1] FALSE
    
    > library(c('MASS', 'nnet'), character.only = TRUE)
    Error in library(c("MASS", "nnet"), character.only = TRUE) : 
      'package' must be of length 1
    

    So require() failed not because MASS and nnet did not exist, but because of a different error. As long as there is an error (no matter what it is), require() returns FALSE.

    One thing off-topic while I’m talking about these two functions: the argument character.only = FALSE for library() and require() is a design mistake in my eyes. It seems the original author(s) wanted to be lazy to avoid typing the quotes around the package name, so library(foo) works like library("foo"). Once you show people they can be lazy, you can never pull them back. Apparently, the editors of JSS (Journal of Statistical Software) have been trying to promote the form library("foo")and discourage library(foo), but I do not think it makes much sense now or it will change anything. If it were in the 90’s, I’d wholeheartedly support it. It is simply way too late now. Yes, two extra quotation marks will kill many kittens on this planet. If you are familiar with *nix commands, this idea is not new – just think about tar -z -x -ftar -zxf, and tar zxf.

    One last mildly annoying issue with require() is that it is noisy by default, because of the default quietly = FALSE, e.g.

    > require('nnet')
    Loading required package: nnet
    > require('MASS', quietly = TRUE)
    

    So when I tell you to load a package, you tell me you are loading a package, as if you had heard me. Oh thank you!






    转载自:https://yihui.name/en/2014/07/library-vs-require/


    相关链接:http://www.cnblogs.com/todoit/archive/2012/10/24/2736514.html


    展开全文
  • 什么是库(library)

    千次阅读 2010-06-24 14:30:00
    什么叫程序库 所谓程序库,一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。通俗一点说,所谓一个库,就是一...
  • library

    2020-07-29 14:19:51
    NULL 博文链接:https://udukwilliam.iteye.com/blog/770674
  • Installing Ruby 2.0.0 with RVM and Homebrew on Mac homebrew官网:http://brew.sh/index.html 参考地址:...
  • 10g SELECT t1.ksllasnam "parent_name", t2.ksllwnam "location" FROM x$ksllw t2, x$kslwsc t1 WHERE t2.indx = t1.indx AND ksllasnam like '%library cache%' parent_name ...
  • java.library.path到底指什么

    千次阅读 2018-07-24 18:10:17
    java.library.path到底指什么? 这个就是.bashrc中的LD_LIBRARY_PATH 设为 export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
  • 执行#/usr/local/php/php -v<br />  出现Warning: PHP Startup: Invalid library (maybe not a PHP library) ‘iconv.so’ in Unknown on line 0   错误. 解决办法:./configure –with-...
  • BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别本质上, jar包是一个zip格式的压缩包. BUILD_JAVA_LIBRARY编译出来的jar包,里面是DEX格式的文件. BUILD_STATIC_JAVA_LIBRARY编译出来的jar包,里面每个java...
  • Wrong JPEG library version: library is 70, caller expects 62 Wrong JPEG library version: library is 62, caller expects 70 Wrong JPEG library version: library is 70, caller expects 80 JPEG版本冲突,...
  • 1.方法一: ...library(devtools) library(RCurl) library(bitops) library(rjson) library(jiebaR) library(jiebaRD) library(wordcloud2) library(sm) library(vioplot) library(curl) libr...
  • Library(图书馆图书管理系统)
  • Qt library介绍

    2012-11-02 16:54:58
    Qt library 分为:Core library,GUI library,Multimedia library, SQL library, OpenGL library, Network library, Script library, Xml patterns library, Test library, UiTools library, XML library, SVG ...
  • OrCAD Library Builder使用详解 超详细 介绍如何建原理图及如何建PCB库
  • PS4 SDK Document

    2020-07-22 23:31:16
    SpeechRecognition Library GnD Specification SpeechRecognition Library Overview SpeechRecognition Library Reference SpeechRecognition Library User's Guide Video Codec Video Data Encoding Tutorial ...
  • 就如同提示一般,直接移除舊版本即可。 命令: sudo apt-get remove libjpeg62-dev
  • Android Library:含有Android特有的库文件,包含APP所需的一切(如源代码、资源文件、Android Manifest),在目录结构上与 Android App相同。Android Library最终被编译打包成供其它Android App依赖的Android ...
  • 显示红色
1 2 3 4 5 ... 20
收藏数 928,928
精华内容 371,571
关键字:

library