标签:pen 配置 符号 shared 总结 链接库 ++ 编译 文件
daw:直接删去当前光标所在的单词
$g++ -o test tes.cpp `pkg-config --libs --cflags opencv`
#含义是编译test.cpp为可执行文件 后面 ` `这个符号是指运行bash命令的参数,寻找文件名为opencv的pkg-config,使用其中的 libs(链接库)和cflags(头文件)
#wolfrecg‘s makefile
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
OBJECTS = imgfeatures.o kdtree.o minpq.o sift.o utils.o xform.o wolf_recg.o dspfeat.o
SOURCE = imgfeatures.c kdtree.c minpq.c sift.c utils.c xform.c wolf_recg.cpp dspfeat.cpp
BIN = libbin.so
$(OBJECTS) : $(SOURCE)
g++ -g -c $(SOURCE) `pkg-config --cflags opencv`
$(BIN):$(OBJECTS)
g++ -shared -fPIC -o $(BIN) $(OBJECTS) `pkg-config --libs --cflags opencv`
clean:
rm $(OBJECTS) $(BIN)
使用方式
#libbin.so是你需要生成终极目标($(BIN))
$ sudo make libbin.so
.cpp需要加载程序实现的头文件和函数的定义
$g++ -shared -fPIC -o test.so test.o
#test.o可以跟上所有需要用的.o文件
python调用c动态链接库模板
import ctypes
from ctypes import *
#加载文件
ll = ctypes.cdll.LoadLibrary
lib = ll(./test.so)
#call
fun=lib.test ##类似c/c++函数指针
fun.restype = c_int ##设置函数返回值类型
fun()#运行此函数
这是一个c的调用模板,可是c++的编译器和c存在了一些不同,因为c++支持了函数重载,所以编译后的函数名和原来的函数名存在了一些差异。可以通过.o目标文件来查看函数名的样式再进行调用
$objdump -t main.o |grep find_wolf
#可以发现find_wolf被封装成了_Z9find_wolfV直接使用这个函数名,可以成功在python中运行。
在最终生成的目标文件的shell中添加 -g选项署名生成可调式的可执行文件
通过命令 s(step)来进入函数的内部
总结:所有的工作中的问题一项一项的都被解决了。做事情不要着急,你不会,就是因为你缺少基本的知识,先静下心来,填补一些知识,搜集一些有用的材料,时间总会给出答案。记住要坚持。
标签:pen 配置 符号 shared 总结 链接库 ++ 编译 文件
原文地址:https://www.cnblogs.com/bookdrip/p/10259460.html