我刚刚开始在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头无效相关推荐

  1. python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...

    根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...

  2. word2vec实例详解python_在python下实现word2vec词向量训练与加载实例

    项目中要对短文本进行相似度估计,word2vec是一个很火的工具.本文就word2vec的训练以及加载进行了总结. word2vec的原理就不描述了,word2vec词向量工具是由google开发的, ...

  3. 利用Python进行数据分析(四):数据加载、存储与文件格式

    标题利用Python进行数据分析(四):数据加载.存储与文件格式 学习笔记来源于:简书https://www.jianshu.com/p/047d8c1c7e14 输入输出通常可以划分为几个大类:读取 ...

  4. python 爬虫+selenium 全自动化下载JS动态加载漫画

    ** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...

  5. python 按需加载_基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)...

    基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 文档转换为PDF有些图片无法完全显示,请移步我的博客查看 完成 ...

  6. python错误修复_如何修复这个dll加载python的错误?

    我在python代码中使用了一个c++dll. 当我在我的计算机上运行python应用程序时,它工作正常,但当我将所有内容复制到另一台计算机时,会发生以下情况:Traceback (most rece ...

  7. python使用matplotlib, seaborn画图时候的数据加载

    写在前面的话 当我们使用python来画图的时候,我觉得最难的部分应该是数据加载.因为尽管官网的教程给出了怎么画出某个图片的示例,但是数据往往是随机产生的,这些数据和我们需要的数据往往是不符的.这个时 ...

  8. ipython和python怎么用_如何使用IPython重新加载和自动加载?

    我刚安装了ipython0.13.1,遇到了两个问题.我有一个小的"demo"项目,其中包含一个名为"app"的应用程序:. ├── app │   ├── _ ...

  9. python默认字体大小_如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵?...

    我正在8x8矩阵显示器上显示文本,并且我没有一个方便使用我的BeagleBone的.ttf文件.如何设置PIL加载的默认字体的大小,使其适合我的8x8矩阵? 根据示例here,我应该能够说font = ...

最新文章

  1. mount cifs出现cannot allocate memory解决方法
  2. 90.386(32位)的保护模式 (286是过渡24位) 91.什么是实模式
  3. Java黑皮书课后题第7章:*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法是检验小于等于根n的素数是否有n整
  4. pyinotify结合ftplib自动上传新建的文件
  5. Linux Arch目录下处理器体系架构介绍
  6. 00002-两数之和-leetcode-1.暴力法(枚举法),2.哈希表法,目前更新了枚举法
  7. 【图像处理基础知识】中文车牌识别API-HyperLPR的应用与相关学习资料(python版)
  8. 如何产生cpk图形_如何正确选择三坐标测量机测头
  9. mysql将俩个SQL查询出来的不一样的结果横向拼接成一行数据
  10. Android开发 MeasureSpec介绍
  11. 田字格写汉字word模板下载可打印【教程】
  12. pmp知识点(8)-项目质量管理
  13. prince和学生们侃侃而谈系列03
  14. 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
  15. [渝粤教育] 九江职业技术学院 客户关系管理 参考 资料
  16. html关于图片缓慢放大
  17. 永中word页码怎么从第二页开始_word转pdf软件有哪些?word转pdf软件怎么操作?
  18. 移动端ui设计,移动端界面
  19. Javaweb自驾游景点查询网站设计与实现
  20. RHEL 5下iSCSI Initiator软件安装配置指导

热门文章

  1. STM32F0官网固件库
  2. (26)打鸡儿教你Vue.js
  3. 产品经理常用的软件可推荐的有哪些?
  4. PTA 7-3 输油管道问题 (50 分)
  5. E. Boxers(贪心+移出多余空位)
  6. 多元函数第三:线性变换(3)等距变换与酉矩阵
  7. 我的投资案例(1)-偶遇阿丁特,重仓好狗狗
  8. P2141 珠心算测验(C语言)
  9. Angular4模板式表单、响应式表单、表单状态字段
  10. 鸿蒙系统学习 LiteOS-m(六)