-
Linux平台下动态链接库.so转换成windiws平台下.dll文件并使用python调用
2020-04-23 11:15:16发现是动态链接库的文件格式不对,遂学习如何将.so文件转换成.dll文件(PS:前提是你有文件的.cpp源码) 第一步新建C++动态链接库项目 将pch.h文件的内容改为如下: #ifndef PCH_H #define PCH_H // 添加要在此处...问题起因:
在运行PointNet的可视化程序时,作者只提供了linux平台下的动态链接库程序源码,自己的windows平台下无法调用。发现是动态链接库的文件格式不对,遂学习如何将.so文件转换成.dll文件(PS:前提是你有文件的.cpp源码)
第一步新建C++动态链接库项目
将pch.h文件的内容改为如下:#ifndef PCH_H #define PCH_H // 添加要在此处预编译的标头 #include "framework.h" #endif //PCH_H //定义宏 #ifdef IMPORT_DLL #else #define IMPORT_DLL extern "C" _declspec(dllimport) //指的是允许将其给外部调用 #endif // 改为你所需要的链接库函数 IMPORT_DLL void render_ball(int h, int w, unsigned char* show, int n, int* xyzs, float* c0, float* c1, float* c2, int r);
第二步:重写dllmain.cpp文件
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include <cstdio> #include <vector> #include <algorithm> #include <math.h> using namespace std; struct PointInfo { int x, y, z; float r, g, b; }; void render_ball(int h, int w, unsigned char* show, int n, int* xyzs, float* c0, float* c1, float* c2, int r) { r = max(r, 1); vector<int> depth(h * w, -2100000000); vector<PointInfo> pattern; for (int dx = -r; dx <= r; dx++) for (int dy = -r; dy <= r; dy++) if (dx * dx + dy * dy < r * r) { double dz = sqrt(double(r * r - dx * dx - dy * dy)); PointInfo pinfo; pinfo.x = dx; pinfo.y = dy; pinfo.z = dz; pinfo.r = dz / r; pinfo.g = dz / r; pinfo.b = dz / r; pattern.push_back(pinfo); } double zmin = 0, zmax = 0; for (int i = 0; i < n; i++) { if (i == 0) { zmin = xyzs[i * 3 + 2] - r; zmax = xyzs[i * 3 + 2] + r; } else { zmin = min(zmin, double(xyzs[i * 3 + 2] - r)); zmax = max(zmax, double(xyzs[i * 3 + 2] + r)); } } for (int i = 0; i < n; i++) { int x = xyzs[i * 3 + 0], y = xyzs[i * 3 + 1], z = xyzs[i * 3 + 2]; for (int j = 0; j<int(pattern.size()); j++) { int x2 = x + pattern[j].x; int y2 = y + pattern[j].y; int z2 = z + pattern[j].z; if (!(x2 < 0 || x2 >= h || y2 < 0 || y2 >= w) && depth[x2 * w + y2] < z2) { depth[x2 * w + y2] = z2; double intensity = min(1.0, (z2 - zmin) / (zmax - zmin) * 0.7 + 0.3); show[(x2 * w + y2) * 3 + 0] = pattern[j].b * c2[i] * intensity; show[(x2 * w + y2) * 3 + 1] = pattern[j].g * c0[i] * intensity; show[(x2 * w + y2) * 3 + 2] = pattern[j].r * c1[i] * intensity; } } } } // 具体内容改为你的文件内容
第三步点击debug按钮生成.dll文件,文件目录如下
如何使用python调用不在赘述,需要再码
-
python文件编译为so文件_Mac上把python源文件编译成so文件
2020-12-11 05:45:48把python源文件编译成so文件...原理相当于将python编译成c,然后再转成.so文件.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。在网上搜了一下,常用的有2种方法:通过gcc(make)来操作使用...把python源文件编译成so文件
前言
实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求。原理相当于将python编译成c,然后再转成.so文件
.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。
在网上搜了一下,常用的有2种方法:
通过gcc(make)来操作
使用python来操作
准备工作
在目录下创建__init__.py和hello.py
hello.py 内容为:
def hello():
print "hello"
使用python来操作
安装所需库CPython,命令如下:
pip install cython
创建文件setup.py,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.py")
)
执行setup.py文件
python setup.py build_ext --inplace
在当前目录下就生成了和当前目录同名的一个目录,进入目录即可看见so文件,打开so文件可见一些乱码,达到了加密的目的
使用gcc来编译
编译成c文件,完成后目录下多了hello.c
cython hello.py
编译成hello.o, 完成后目录下多了hello.o
gcc -c -fPIC -I/usr/include/python2.7/ hello.c
编译成so文件
gcc -undefined dynamic_lookup -shared hello.o -o hello.so
部分博客写的命令没有加-undefined dynamic_lookup的参数,会报错,提示
Undefined symbols for architecture x86_64
也有说加-lstdc++参数使用c++标准库就可以的,但是我尝试了不成功,依然报同样的错误
gcc -lstdc++ -v -shared hello.o -o hello.so
验证
在so文件目录下,进入python终端,然后尝试使用一下这个模块就可以了,如下:
>>> from hello import hello
>>> hello()
hello
参考
-
python文件编译为so_Mac上把python源文件编译成so文件
2020-12-17 01:31:09把python源文件编译成so文件...原理相当于将python编译成c,然后再转成.so文件.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。在网上搜了一下,常用的有2种方法:通过gcc(make)来操作使用...把python源文件编译成so文件
前言
实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求。原理相当于将python编译成c,然后再转成.so文件
.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。
在网上搜了一下,常用的有2种方法:
通过gcc(make)来操作
使用python来操作
准备工作
在目录下创建__init__.py和hello.py
hello.py 内容为:
def hello():
print "hello"
使用python来操作
安装所需库CPython,命令如下:
pip install cython
创建文件setup.py,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.py")
)
执行setup.py文件
python setup.py build_ext --inplace
在当前目录下就生成了和当前目录同名的一个目录,进入目录即可看见so文件,打开so文件可见一些乱码,达到了加密的目的
使用gcc来编译
编译成c文件,完成后目录下多了hello.c
cython hello.py
编译成hello.o, 完成后目录下多了hello.o
gcc -c -fPIC -I/usr/include/python2.7/ hello.c
编译成so文件
gcc -undefined dynamic_lookup -shared hello.o -o hello.so
部分博客写的命令没有加-undefined dynamic_lookup的参数,会报错,提示
Undefined symbols for architecture x86_64
参考https://github.com/cloudwu/skynet_sample/issues/9 加上那个参数就好了
也有说加-lstdc++参数使用c++标准库就可以的,但是我尝试了不成功,依然报同样的错误
gcc -lstdc++ -v -shared hello.o -o hello.so
验证
在so文件目录下,进入python终端,然后尝试使用一下这个模块就可以了,如下:
>>> from hello import hello
>>> hello()
hello
参考
python程序编译成exe文件
最近越来越喜欢使用python写工具.使用的时候,发现程序内部成员python安装目录常常不同,如果用bat双击执行,常常需要修改从svn上down下来的bat文件中python.exe的路径.而给策 ...
如何将python源文件打包成exe文件
PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Python 程序可以在没有安装 Py ...
将python源文件打包成exe文件
pyinstaller 库的使用PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Pyt ...
mac 上的 python
1.mac 上的 python 自己感觉很乱 1.额外安装的 自带的 python27-apple /System/Library/Frameworks/Python.framework/Versio ...
Python工程编译成跨平台可执行文件(.pyc)
原文:https://blog.csdn.net/zylove2010/article/details/79593655 在某些场景下,若不方便将python编写的源码工程直接给到其他人员,则可以将p ...
晓莲说-何不原创:如何通过jad把class批量反编译成java文件
背景:前几天在项目开发的时候遇到一个问题,那就是利用myeclipse编写好的一个项目打包成jar包后上传部署到服务器里,之后本地的项目被自己改来改去出现了一些问题,想着把上传到服务器里面的war包下 ...
用gulp把less文件编译成css文件
第一次使用gulp构建工具,使用gulp将.less文件编译成.css文件并输出.根据视频做了笔记.提供新手和自己以后做参考. HTML文件
Golang 编译成 DLL 文件
golang 编译 dll 过程中需要用到 gcc,所以先安装 MinGW. windows 64 位系统应下载 MinGW 的 64 位版本: https://sourceforge.net/pro ...
如何使用keil5将stm32的hal库编译成lib文件——F1版本
hal库中keil5中编译的速度是比较慢的,相同情况下,每次都要编译的时候,比标准库是要慢很多的,因此就hal库编译成lib文件是一种加快编译速度的方法,当然也有其自身的缺点.一.步骤1.使用cube ...
随机推荐
git命令查看远程分支
使用git remote -v命令可以查看本地设置好的所有远程仓库地址. ➜ learn-vue git:(master) git remote -v origin https://github.co ...
用例设计工具PICT — 输入组合覆盖
1 成对测试简介 成对测试(Pairwise Testing)又称结对测试.两两测试,是一种正交分析的测试技术.成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的.是当不可能遍 ...
SQL Server 2012 创建数据库快照
不是所有的MSSQL数据库版本都支持数据库快照,只有Enterprise版本的才支持. 在其他版本上,以Business Intelligence Edition版本为例,创建快照时,会报如下错误 消 ...
Lock wait timeout exceeded; try restarting transaction
What gives this away is the word transaction. It is evident by the statement that the query was atte ...
Linux 内核动态函数调用可视化工具
要求: python .7以上 https://www.python.org/ftp/python/ EG:wget --no-check-certificate https://www.python ...
react 首屏加载优化
react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...
Java 经典面试题 —— 性能
1. 性能 String.StringBuffer 与 StringBuilder 两个字符串相加,str1+str2,相当于执行: StringBuilder strBuilder1 = new S ...
求XF+闭包(第十一届河南省省赛真题)
题目描述 如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1 ...
关于Unity中混合模式、Alpha测试、深度测试、通道遮罩、面剔除的使用----渲染通道通用指令(二)
混合模式 着色完成后,需要把颜色混合到帧缓冲区里面,涉及到源和目标. 1:在所有计算完成后,决定当前的计算结果输出到帧缓冲区时,如何混合源和目标,通常用来绘制半透明的物体;2: Blend Off 关 ...
-
python编译so_Mac上把python源文件编译成so文件
2021-01-15 00:23:16把python源文件编译成so文件...原理相当于将python编译成c,然后再转成.so文件.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。在网上搜了一下,常用的有2种方法:通过gcc(make)来操作使用...把python源文件编译成so文件
前言
实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求。原理相当于将python编译成c,然后再转成.so文件
.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。
在网上搜了一下,常用的有2种方法:
通过gcc(make)来操作
使用python来操作
准备工作
在目录下创建__init__.py和hello.py
hello.py 内容为:
def hello():
print "hello"
使用python来操作
安装所需库CPython,命令如下:
pip install cython
创建文件setup.py,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.py")
)
执行setup.py文件
python setup.py build_ext --inplace
在当前目录下就生成了和当前目录同名的一个目录,进入目录即可看见so文件,打开so文件可见一些乱码,达到了加密的目的
使用gcc来编译
编译成c文件,完成后目录下多了hello.c
cython hello.py
编译成hello.o, 完成后目录下多了hello.o
gcc -c -fPIC -I/usr/include/python2.7/ hello.c
编译成so文件
gcc -undefined dynamic_lookup -shared hello.o -o hello.so
部分博客写的命令没有加-undefined dynamic_lookup的参数,会报错,提示
Undefined symbols for architecture x86_64
参考https://github.com/cloudwu/skynet_sample/issues/9 加上那个参数就好了
也有说加-lstdc++参数使用c++标准库就可以的,但是我尝试了不成功,依然报同样的错误
gcc -lstdc++ -v -shared hello.o -o hello.so
验证
在so文件目录下,进入python终端,然后尝试使用一下这个模块就可以了,如下:
>>> from hello import hello
>>> hello()
hello
参考
-
Mac上把python源文件编译成so文件
2018-07-12 11:49:00把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的....so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。 在网上搜了一下,常用的有2种方法: 通过gcc... -
转 Linux下的 .o、.a、.so文件
2014-02-20 14:07:43工程里很多函数只是有声明,找不到实现的代码。因为那些实现代码已经编译成库所以看不见,我所看见的全是一堆...分类:静态函数库(对应.a文件)、共享函数库(对应.so文件,类似于Windows的dll文件)、动态加载函数库 -
[转]Android调用so文件(C代码库)方法详解
2016-07-26 11:17:32一、为什么调用c的dll要用源码编译成so库 Android系统是基于linux内核的移动终端系统,而dll是在windows环境下生成和调用的c库,所以不可以直接为android系统调用。 二、安装 (I)安装cygwin 1.下载cygwin ... -
python脱离依赖运行py文件_如何使Python脚本独立可执行文件运行没有任何依赖?...
2020-12-30 04:23:39您可以使用py2exe已经回答,并使用cython转换您的密钥.py文件在.pyc ,C编译的文件,如Windows中的.dll和.so在Linux中,更难以恢复比普通的.pyo和.pyc文件(和也获得了性能!)我已经与pyinstaller取得了一些成功。 在... -
Python调用C++函数(SWIG,VS2013使用numpy.i完成Numpy与C++数组转换)
2020-06-24 12:29:29相比于其它几种方式,使用SWIG接口文件编写比较简单,编译也很方便,主要是不太好调试,因为是编译成.dll或者.so才能在Python中调用。1.安装SWIG windows:官网下载,解压到D盘,将swig.exe所在文件夹添加到系统路径... -
使用 ctypes 进行 Python 和 C 的混合编程
2019-04-26 13:21:14转自:https://www.cnblogs.com/gaowengang/p/7919219.html ...Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库的形式,即 Windows 下的 .dll 文件,或者 Linux 下的 .so 文件。先... -
[android] ndk环境的搭建
2019-09-24 03:28:54java语言的步骤是 转成.class文件 java的虚拟机运行 C语言在windows上==> .o中间文件 ==>.exe可执行文件 打包函数是.dll文件 C语言在linux上 ==>.o中间文件 ==>.elf可执行文件 打包函数是.so或者.a... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08所以路径是D:\Qt\2009.04\qt\bin),可以找到所有的相关.dll 文件。在这里 找到mingwm10.dll 文件,将其复制到C:\WINDOWS\system 文件夹下,即可。下 面再提示缺少什么dll 文件,都像这样解决就可以了。 二、Qt ... -
Radmin自动登录器v3.0
2018-01-06 16:04:23若要用到聊天、语音聊天、传送信息等连接模式,必须将相应的8个dll文件也拷贝到该目录中:ChatLPCx.dll、raudiox.dll、rchatx.dll、unicows.dll、vcintcx.dll、vcintsx.dll、voicex.dll、WinLpcDl.dll。 (3)、... -
Radmin自动登录器v3.0-多国语言绿色版-Release1-20150615
2015-06-12 16:38:05若要用到聊天、语音聊天、传送信息等连接模式,必须将相应的8个dll文件也拷贝到该目录中:ChatLPCx.dll、raudiox.dll、rchatx.dll、unicows.dll、vcintcx.dll、vcintsx.dll、voicex.dll、WinLpcDl.dll。 (3)、... -
Visual C++ 编程资源大全(英文源码 其它)
2007-10-24 01:00:3305.zip Finding memory leaks 发现内存的泄漏(6KB)<END><br>6,06.zip Convert message ID to a string 将消息标志符转换成字符串(4KB)<END><br>7,07.zip Message Tracer 消息跟踪(5KB)<END><br>8,... -
Conflict with my .vimrc?
2021-01-12 08:48:05再次打开前次使用的文件, 自动到上次的光标位置 au BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "norm g`\...
-
2021年软考系统规划与管理师-下午历年真题解析视频课程
-
CSY2043:我的CSY2043用于UON的资料库-源码
-
SSL证书与CA数字证书有什么区别?
-
微信质量群采集助手
-
定制材料 GPTMS修饰的纳米二氧化硅(GPTMS-SiO2)/C18键合纳米金修饰二氧化硅颗粒/二氧化硅修饰咪唑型离子液体
-
Navicat连接Linux mysql报10060解决
-
上肢康复的自适应机器人辅助治疗控制方法的临床实验研究
-
weather-app:使用React js检查天气应用-源码
-
python实现rsa加密
-
用Go语言来写区块链(一)
-
考PMP真的有用吗?
-
DOPSoft 1.01.10.rar
-
Sum_sinusoid_autocorrelation.m
-
astronomy-notebooks:iPython笔记本展示了NumPy,matplotlib和我们的宇宙-源码
-
英语4级《学霸秘籍》.pdf
-
js处理后端返回的静态文件浏览器默认直接打开
-
4.International Asset Pricing.ppt
-
graphql-playground-源码
-
cracklioyun-源码
-
精通编译Makefile,Nina, 从底层uboot到Android