zoukankan      html  css  js  c++  java
  • 去除scons构建动态库的前缀lib

    如何使用scons构建工程,请参考快速构建C++项目工具Scons,结合Editplus搭建开发环境

    编译SharedLibrary项目的时候,生产的so文件时自动加上lib, 例如:

    env = Environment()
    env.SharedLibrary('hello', sources=['hello.c'])

    将以上保存成build.py, 执行编译命令

    scons -f build.py

    生成动态库so的文件名 libhello.so。这样做的好处,自然不用多说。这种lib前缀并不适合所有情况,写这个随笔的也是因为遇到不需要lib前缀的情况。

    参考网上写了一个c的python模块,按照模块的规则,动态库的入口函数必须是"init+模块名",自然生成的动态库也必须跟模块名一致,scons的SharedLibrary构建工具生成的文件名自然就多了个“lib”前缀,例如: libhello.so。 python脚本文件import hello语法就会出错。

    找了很多文章都是教程,只能把scons的源码翻了一下,找到$SHLIBPREFIX这个scons环境变量,使用env的Dump方法查看这个环境变量

    env = Environment()
    print env.Dump()
    [root@A xxx]# scons -f hello.py |grep LIBPREFIX
      'LDMODULEPREFIX': '$SHLIBPREFIX',
      'LIBPREFIX': 'lib',
      'LIBPREFIXES': ['$LIBPREFIX'],
      'SHLIBPREFIX': '$LIBPREFIX',
      '_LIBFLAGS': '${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}',
    [root@A xxx]#

    蓝色字体就是env里面的默认设置,修改方法也就简单了

    env = Environment(SHLIBPREFIX='')

    至此动态库默认前缀lib被去掉了。

  • 相关阅读:
    2019.1.10英语笔记
    2019.1.9专业课笔记
    团队触发器
    团队脚本备份
    导表
    oslo.config
    nginx启动、重启、关闭
    常见的awk内建变量
    LVM
    Django, one-to-many, many-to-many
  • 原文地址:https://www.cnblogs.com/lovelylife/p/4021269.html
Copyright © 2011-2022 走看看