python loadlibrary_使用ctypes.cdll.LoadLibrary从Python加载库时ELF头无效
我刚刚开始在Linux上使用gcc。我正在学习教程here,只是我在使用g++编译器。
你好,cpp#include
#include "hello.h"
void
hello (const char * name)
{
printf ("Hello, %s!\n", name);
}
再见,cpp#include
#include "hello.h"
void
bye (void)
{
printf ("Goodbye!\n");
}
你好,hvoid hello (const char * name);
void bye (void);
然后在shell中运行以下命令:$ g++ -Wall -c hello_fn.cpp
$ g++ -Wall -c bye_fn.cpp
$ ar cr libhello.a hello_fn.o bye_fn.o
然后我从python中尝试以下操作:Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> test = ctypes.cdll.LoadLibrary(r'/home/oob/development/libtest/libhello.a')
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python2.7/ctypes/__init__.py", line 431, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
OSError: /home/jeff/development/libtest/libhello.a: invalid ELF header
我的想法是用c++编写一些函数并从Python中调用它们。有什么想法吗?
更新:我可以让事情“工作”。根据Cat Plus的说法,我可能不会向这个方向开发新的代码,但是我可以使用一个从Windows移植到Linux的大型遗留c++库。我们需要一个前端来调用这个库中一些长时间运行的函数,所以我认为Python可能是最简单的。这些函数创建了很多输出,只返回一个整数返回代码,所以也许我可以避免Cat Plus所说的“痛苦”的话。
这就是我所做的。
修改的hello-fn.cpp#include
#include "hello.h"
extern "C" int
hello (void)
{
return 16;
}
由cpp修改#include
#include "hello.h"
extern "C" void
bye (void)
{
printf ("Goodbye!\n");
}
修改了hello.hextern "C" int hello (void);
extern "C" void bye (void);
buildscript.sh版本#!/bin/bash
rm *.o
rm *.so
g++ -fpic -g -c -Wall hello_fn.cpp
g++ -fpic -g -c -Wall bye_fn.cpp
#make a shared library, not a static library (thanks cat plus plus)
g++ -shared -o libhello.so hello_fn.o bye_fn.o
测试.py#!/usr/bin/python
import ctypes
c = ctypes.cdll.LoadLibrary(r'/home/jeff/development/libtest/libhello.so')
a = c.hello()
print 'hello was ' + str(a)
c.bye()
在终点站试一试。。。。oob@ubuntu:~/development/libtest$ ./build_script.sh
oob@ubuntu:~/development/libtest$ python test.py
hello was 16
Goodbye!
我们的遗留库并没有真正使用任何特定于windows的c++工具(感谢编写代码的人),所以它是一个非常简单的端口。我们有几个函数使用外部“C”来公开函数。对于端口,我做了以下更改:#ifdef LINUX
#define __stdcall
#endif
#ifdef WINDOWS
#define __stdcall __stdcall
#endif
对于我们的一个功能,我可以保持不变,例如:extern "C" long __stdcall reform_proj {
//do a bunch of stuff
return 0;
}
python loadlibrary_使用ctypes.cdll.LoadLibrary从Python加载库时ELF头无效相关推荐
- python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...
根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...
- word2vec实例详解python_在python下实现word2vec词向量训练与加载实例
项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...
- 利用Python进行数据分析(四):数据加载、存储与文件格式
标题利用Python进行数据分析(四):数据加载.存储与文件格式 学习笔记来源于:简书https://www.jianshu.com/p/047d8c1c7e14 输入输出通常可以划分为几个大类:读取 ...
- python 爬虫+selenium 全自动化下载JS动态加载漫画
** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...
- python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...
基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...
- python错误修复_如何修复这个dll加载python的错误?
我在python代码中使用了一个c++dll. 当我在我的计算机上运行python应用程序时,它工作正常,但当我将所有内容复制到另一台计算机时,会发生以下情况:Traceback (most rece ...
- python使用matplotlib, seaborn画图时候的数据加载
写在前面的话 当我们使用python来画图的时候,我觉得最难的部分应该是数据加载.因为尽管官网的教程给出了怎么画出某个图片的示例,但是数据往往是随机产生的,这些数据和我们需要的数据往往是不符的.这个时 ...
- ipython和python怎么用_如何使用IPython重新加载和自动加载?
我刚安装了ipython0.13.1,遇到了两个问题.我有一个小的"demo"项目,其中包含一个名为"app"的应用程序:. ├── app │ ├── _ ...
- python默认字体大小_如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵?...
我正在8x8矩阵显示器上显示文本,并且我没有一个方便使用我的BeagleBone的.ttf文件.如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵? 根据示例here,我应该能够说font = ...
最新文章
- mount cifs出现cannot allocate memory解决方法
- 90.386(32位)的保护模式 (286是过渡24位) 91.什么是实模式
- Java黑皮书课后题第7章:*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法是检验小于等于根n的素数是否有n整
- pyinotify结合ftplib自动上传新建的文件
- Linux Arch目录下处理器体系架构介绍
- 00002-两数之和-leetcode-1.暴力法(枚举法),2.哈希表法,目前更新了枚举法
- 【图像处理基础知识】中文车牌识别API-HyperLPR的应用与相关学习资料(python版)
- 如何产生cpk图形_如何正确选择三坐标测量机测头
- mysql将俩个SQL查询出来的不一样的结果横向拼接成一行数据
- Android开发 MeasureSpec介绍
- 田字格写汉字word模板下载可打印【教程】
- pmp知识点(8)-项目质量管理
- prince和学生们侃侃而谈系列03
- 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
- [渝粤教育] 九江职业技术学院 客户关系管理 参考 资料
- html关于图片缓慢放大
- 永中word页码怎么从第二页开始_word转pdf软件有哪些?word转pdf软件怎么操作?
- 移动端ui设计,移动端界面
- Javaweb自驾游景点查询网站设计与实现
- RHEL 5下iSCSI Initiator软件安装配置指导