编译项目打包成so文件

原创 2017年06月21日 17:17:08

CMake--C++代码打成.so包

1. 借助CMake打.so包

 把目录utils下的文件打出.so包。

%hmqfua%60i

其中CMakeLists.txt内容:

cmake_minimum_required(VERSION 2.8)

aux_source_directory(. utils_src)

add_library(utils SHARED ${utils_src})

set_target_properties(utils PROPERTIES output_name "utils")

注意:前面的关键字可以大写也可以小写,括号内的关键字必须大写。


编译:

cmake .

make

生成了共享库libutils.so


2. 编译实际的项目

项目sticker_me中文件结构如下,其中build目录用于生成编译的结果。

CMake简介和使用示例 - 淮静 - 淮静的博客
 

它们之间的调用关系如下:

CMake简介和使用示例 - 淮静 - 淮静的博客
 

各个CMakeLists.txt如下:

./CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(sticker_me)

add_subdirectory(src)

add_subdirectory(facedetect)

add_subdirectory(utils)

src/CMakeLists.txt:

find_package(OpenCV REQUIRED)

include_directories(facedetect utils)

aux_source_directory(. src_dir)

add_executable(sticker_me ${src_dir})

target_link_libraries(sticker_me ${OpenCV_LIBS} utils facedetect)

facedetect/CMakeLists.txt:

include_directories(utils) 
aux_source_directory(. facedetect_dir) 
add_library(facedetect SHARED? ${facedetect_dir}) 
set_target_properties(facedetect PROPERTIES output_name "facedetect") 
target_link_libraries(facedetect utils)

utils/CMakeLists.txt:

aux_source_directory(. utils_dir) 
add_library(utils SHARED ${utils_dir}) 
set_target_properties(utils PROPERTIES output_name "utils") 


编译:

cd build

cmake ..

make



cython将py文件编译成so文件

一、环境准备

    安装cython,以及gcc编译环境
    wget https://bootstrap.pypa.io/get-pip.py
    python get-pip.py


    pip install cython
    yum install -y gcc python-devel


二、编写测试脚本
   test.py,内容如下
   import os
   def test():
       print  os.path.realpath('.')
   
三、将其拷贝到python系统路径
    /usr/lib/python2.7/site-packages/test
    在test目录下创建__init__.py, 与 test.py 的文件
    test.py 上面内容如上所示


四、脚本测试
    python 
    >>> import lyh.test
    >>> lyh.test.test()


五、编译so文件
    以下操作均在 /usr/lib/python2.7/site-packages/test 路径下执行
    
    1. cython test.py
    2. gcc -c -fPIC -I/usr/include/python2.7/ test.c
    3. gcc -shared test.o -o test.so
    
六、验证so文件的可用性
    1. 移除/usr/lib/python2.7/site-packages/test/test.py 文件,只保留 test.so文件
        test
        ├── __init__.py
        └── test.so
    2. 
    python
    >>> import test.test
    >>> test.test.test()
    
    可以执行

    验证完成

七、使用setup.py 编译so     1. 编写setup.py文件,位于/usr/lib/python2.7/site-packages/test,内容如下:          from distutils.core import setup     from Cython.Build import cythonize     setup(         ext_modules = cythonize("test.py")     )     2.然后运行

        setup.py build_ext --inplace

Python调用C++的.so文件


from ctypes import *
test = cdll.LodayLibrary(" ./certificate.so ")
print test
testpy = test.loadFile      //loadFile是C++函数
testpy.argtype = c_char_p                      //这里是testy.argtype而不是testy..argtypes
testpy.restype = c_char_p
 ss = "/systemInfo.sys"      // 向 loadFile传的参数
params = testpy(ss)
print params

     这里是testy.argtype而不是testy..argtypes,当参数多于2个时才用argtypes,例如:encodeFile.argtypes = [c_char_p, c_char_p]



                
版权声明:本文为博主原创文章,未经博主允许不得转载。

C++中如何应用.so共享库

今天boss給分配了一些編程的任務要求,每一個方法形成一個。so庫,一聽之下有點蒙了,以前編程中還真沒有用過這個玩意!各種找資料,現在就把一些比較基本的東西來整理一下,以供參考!   什么是...
  • songqiqi00
  • songqiqi00
  • 2014年11月20日 10:53
  • 551

CMake简介,打包so文件,编译实际项目

CMake简介和使用示例          下载LOFTER我的照片书  | CMake是常用的跨平台编译器。图像这块在给服务端做...
  • mango9126
  • mango9126
  • 2016年08月23日 11:35
  • 5282

python将py编译成so方法

python:让源码更安全之将py编译成so 应用场景   Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,使用其开发产品快速高效。   python的解释特性是将py编译...
  • qq_20154743
  • qq_20154743
  • 2017年09月08日 10:13
  • 608

Make成python可以调用的.so文件。

  • 2017年11月30日 13:19
  • 9.83MB
  • 下载

python文件编译成so介绍 - 1.使用cython将py文件编译成so文件

一、环境准备    安装cython,以及gcc编译环境wget https://bootstrap.pypa.io/get-pip.py python get-pip.py pip install ...
  • linshenyuan1213
  • linshenyuan1213
  • 2017年05月24日 16:02
  • 2473

so编写和Python调用.so文件

  • 2016年02月01日 11:20
  • 228KB
  • 下载

Python实例浅谈之三Python与C/C++相互调用

一、问题       Python标识符必须以字母或下划线开头,后面跟字母、下划线或者数字,且标识符不能为关键字,如何有效的检查? 二、解决 1、方法一 (1)python脚本 三、总结 ...
  • taiyang1987912
  • taiyang1987912
  • 2015年04月02日 14:12
  • 75047

Python 终于打包成功了,MLBD

每次NN做了点东西,就在那边炫耀,而且把代码打包,不让我看。 只要我做点什么东西,他就会凑过来看。 我也想打包一下,可是不知道是环境还是啥的,总是失败。 今天他又在炫耀,其实他做的的那东西,就那...
  • passionboyxie
  • passionboyxie
  • 2014年08月08日 14:48
  • 3264

AndroidStudio打包.so库

AndroidStudio版本:2.3 打包方式:CMake 需要的插件:NDK,LLDB   首先下载好以上环境 如果上图列表中没有CMake,LLDB等选项,很可能的原因是A...
  • tianmao111
  • tianmao111
  • 2017年03月17日 11:23
  • 613

NDK 之生成so库

Android Studio 配置 NDK(一) 什么是ndk, 简单的讲就是ndk可以让你调用到c/c++方法来实现一些比较安全的功能,例如你完全可以将Android程序的数据 通过c/c++原来...
  • renjianhhong
  • renjianhhong
  • 2017年07月15日 17:13
  • 258
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译项目打包成so文件
举报原因:
原因补充:

(最多只允许输入30个字)