我在Python语言中使用ctype来处理libgphoto2。以下代码在32位计算机上成功,但在64位计算机(Linux、Ubuntu)上失败,并出现分段错误:
import ctypes
gp = ctypes.CDLL('libgphoto2.so')
a = gp.gp_library_version(0)
x = ctypes.c_char_p.from_address(a)
x.value
libphoto2、ctype和python都来自存储库,所以我假设问题出在我的代码中;我需要以一种更通用的方式来考虑指针。gp_library_version()返回cons
当我从ctypes调用的c函数实例化Python对象时,我的嵌入式Python3.3程序出现了分段错误。
在设置好解释器之后,我可以成功地从c main实例化一个python Int (以及一个自定义的c扩展类型):
#import <Python/Python.h>
#define LOGPY(x) \
{ fprintf(stderr, "%s: ", #x); PyObject_Print((PyObject*)(x), stderr, 0); fputc('\n', stderr); }
// c function to be cal
我有这样的事情:
import ctypes
dll = ctypes.CDLL('libc.so.6')
dll.malloc.argtypes = ctypes.c_size_t
dll.malloc.restype = ctypes.c_void_p
ptr: int = dll.malloc(100) # how do i write to this memory?
print(ptr) # gives a memory address
如何为该内存设置值?最好是ctypes.py_object。
我知道在Python中这样做是个坏主意,但我只是在尝试打破规则。
我试图从Linux上的纯Python代码中调用内联机器代码。为此,我将代码嵌入到字节文本中。
code = b"\x55\x89\xe5\x5d\xc3"
然后通过通过ctypes调用以允许执行包含代码的页面。最后,我尝试使用ctypes调用代码。这是我的完整代码:
#!/usr/bin/python3
from ctypes import *
# Initialise ctypes prototype for mprotect().
# According to the manpage:
# int mprotect(const void *addr, size_
我正在学习如何在出现错误后使用Python的ctypes' and am able to wrap and call a function, but I can't figure out how to get theerrno`包装c函数。对于本例,我将包装。这不是完整的代码,只是一个会导致错误的例子:
import ctypes
c_lib = ctypes.cdll.LoadLibrary('libc.so.6')
inotify_add = c_lib.inotify_add_watch
inotify_add.argtypes = (ctypes.c
我的C++程序:
#include <iostream>
using namespace std;
struct FirstStructure
{
public:
int first_int;
int second_int;
};
struct SecondStructure
{
public:
int third_int;
FirstStructure ft;
};
int test_structure(SecondStructure ss)
{
int sum = ss.ft.first_int + ss.ft.second_in
我在Docker内部的AlpinLinux3.7上运行Twisted (Python2.7.x)。
我现在想使用twisted.internet.inotify模块,但是加载失败。
它在中触发了以下异常
name = ctypes.util.find_library('c')
if not name:
raise ImportError("Can't find C library.")
libc = ctypes.cdll.LoadLibrary(name)
initializeModule(libc)
问题是AlpinLinux3.x有一个bu
我在ctype方面遇到了一个有趣的问题;虽然它似乎可以在常规的python脚本中工作,但当我在解释器中使用printf()时,它会在字符串本身之后打印字符串的长度。演示:
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>&
我试图在UbuntuLinux16.04上用Python2.7.14中的ctypess包装CUDA9.0中的cublasXt*gemm函数。这些函数接受主机内存中的数组作为它们的一些参数。我在C++中成功地使用了它们,如下所示:
#include <iostream>
#include <cstdlib>
#include "cublasXt.h"
#include "cuda_runtime_api.h"
void rand_mat(float* &x, int m, int n) {
x = new float[m*
我有一个使用ctype的简单代码:
Python 3.1.1 (r311:74480, Feb 23 2010, 11:06:41)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6")