• scons 库文件生成和链接


    一、编译库文件
    1. 编译库文件 Library()
    实例:

    ### hello.c 文件内容
    int main()
    {
    printf("Hello, world! ");
    }

    ### goodbye.c 文件内容
    int main()
    {
    printf("Good Bye! ");
    }

    ### SConstruct 文件内容
    Library( "hello", ['hello.c', 'goodbye.c'] )

    在cmd下编译,可以发现会生成 hello.lib 这个库文件。

    PS C:UsersAdministratorDesktopscons_study02> scons -Q
    cl /Fogoodbye.obj /c goodbye.c /nologo
    goodbye.c
    cl /Fohello.obj /c hello.c /nologo
    hello.c
    lib /nologo /OUT:hello.lib hello.obj goodbye.obj
    PS C:UsersAdministratorDesktopscons_study02>

    如果Library 不定义名字,则会使用第一个源文件的名字命名。

    2. 使用源代码或者目标文件编译库文件
    Library中的参数可以是 源文件,也可以时 .o 的中间文件。

    ### SConstruct 文件内容
    Library( "hello", ['hello.c', 'goodbye.o'] )

    3. 编译静态库 StaticLibrary()
    Library() 默认是编译静态库的,当然也可以使用StaticLibrary() 来定义编译静态库

    ### SConstruct 文件内容
    StaticLibrary( "hello2", ['hello.c', 'goodbye.c'] )

    4. 编译动态库 SharedLibrary()
    如果想编译动态库(在POSIX系统里)或DLL文件(Windows系统),可以使用SharedLibrary

    ### SConstruct 文件内容
    SharedLibrary( "hello2", ['hello.c', 'goodbye.c'] )

    如下为执行结果: 生成 hello2.dll 文件
    PS C:UsersAdministratorDesktopscons_study02> scons -Q
    link /nologo /dll /out:hello2.dll /implib:hello2.lib hello.obj goodbye.obj

    二、链接库文件
    ## 生成一个名为 foo.lib 的库文件
    Library('foo', ['f1.c', 'f2.c', 'f3.c'])
    ## 编译prog.c 文件,指定库文件为 foo.lib 和 bar.lib, 在当前文件夹中寻找
    Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')

    $LIBPATH 用于指定库文件的目录:

    ## linux:
    Program('prog.c', LIBS=['foo', 'bar'], LIBPATH=['/usr/lib', '/usr/local/lib'])

    ## POSIX
    Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='/usr/lib:/usr/local/lib')

    ## Windows
    Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='C:\lib;D:\lib')
    ————————————————
    版权声明:本文为CSDN博主「Jaimex8」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Ciellee/article/details/87905918

  • 相关阅读:
    你现在是否在高效地使用时间?
    关于不使用web服务实现文本框自动完成扩展
    SpringBoot(一) -- SpringBoot入门
    微信小程序(三)--小程序UI开发
    微信小程序(二)--逻辑层与界面层
    微信小程序(一)--微信小程序的介绍
    Spring学习(七)--Spring MVC的高级技术
    Spring学习(四)--面向切面的Spring
    Spring学习(三)--高级装配
    django源码分析 LazySetting对象
  • 原文地址:https://www.cnblogs.com/hanrp/p/11558080.html
Copyright © 2020-2023  润新知