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被去掉了。

  • 相关阅读:
    从getaddrinfo看Glibc的nss
    跟踪一次网络发送
    Dwarf2结构在gcc中的应用及调试器实现分析
    scrapy基础教程
    leetcode题目清单
    机器学习——入门教程2
    机器学习——入门教程1
    C++ STL之vector用法总结
    Mac下用g++编译opencv程序报错
    Linux下环境变量设置
  • 原文地址:https://www.cnblogs.com/lovelylife/p/4021269.html
Copyright © 2011-2022 走看看