精华内容
下载资源
问答
  • 发现是动态链接库文件格式不对,遂学习如何将.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文件...原理相当于将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文件...原理相当于将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工程编译成跨平台可执行文件&lpar;&period;pyc&rpar;

    原文: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&semi; 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&plus;闭包&lpar;第十一届河南省省赛真题&rpar;

    题目描述 如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1 ...

    关于Unity中混合模式、Alpha测试、深度测试、通道遮罩、面剔除的使用----渲染通道通用指令&lpar;二&rpar;

    混合模式 着色完成后,需要把颜色混合到帧缓冲区里面,涉及到源和目标. 1:在所有计算完成后,决定当前的计算结果输出到帧缓冲区时,如何混合源和目标,通常用来绘制半透明的物体;2: Blend Off 关 ...

    展开全文
  • 把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源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的....so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。 在网上搜了一下,常用的有2种方法: 通过gcc...
  • 工程里很多函数只是有声明,找不到实现的代码。因为那些实现代码已经编译库所以看不见,我所看见的全是一堆...分类:静态函数库(对应.a文件)、共享函数库(对应.so文件,类似于Windows的dll文件)、动态加载函数库
  • 一、为什么调用c的dll要用源码编译成so库 Android系统是基于linux内核的移动终端系统,而dll是在windows环境下生成和调用的c库,所以不可以直接为android系统调用。 二、安装 (I)安装cygwin 1.下载cygwin ...
  • 您可以使用py2exe已经回答,并使用cython转换您密钥.py文件在.pyc ,C编译的文件,如Windows.dll和.so在Linux中,更难以恢复比普通.pyo和.pyc文件(和也获得了性能!)我已经与pyinstaller取得了一些成功。 在...
  • 相比于其它几种方式,使用SWIG接口文件编写比较简单,编译也很方便,主要是不太好调试,因为是编译.dll或者.so才能在Python中调用。1.安装SWIG windows:官网下载,解压到D盘,将swig.exe所在文件夹添加到系统路径...
  • 自:https://www.cnblogs.com/gaowengang/p/7919219.html ...Python ctypes 要使用 C 函数,需要先将 C 编译动态链接库形式,即 Windows .dll 文件,或者 Linux 下 .so 文件。先...
  • [android] ndk环境搭建

    2019-09-24 03:28:54
    java语言步骤是 转成.class文件 java虚拟机运行 C语言在windows上==> .o中间文件 ==>.exe可执行文件 打包函数是.dll文件 C语言在linux上 ==>.o中间文件 ==>.elf可执行文件 打包函数是.so或者.a...
  • 所以路径是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)、...
  • 若要用到聊天、语音聊天、传送信息等连接模式,必须将相应8个dll文件也拷贝到该目录中:ChatLPCx.dll、raudiox.dll、rchatx.dll、unicows.dll、vcintcx.dll、vcintsx.dll、voicex.dll、WinLpcDl.dll。 (3)、...
  • 05.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`\&#...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

windows的dll转成so文件