我有一个C库,它被编译成一个共享对象,并希望围绕它构建一个ctypes接口,从Python调用C函数.
一般来说它工作正常,但在C库中有一个双数组的定义:
typedef double __attribute__ ((aligned (32))) double_array[512];
Run Code Online (Sandbox Code Playgroud)
我发现无法直接访问此类型,所以我在Python中定义:
DoubleArray = ctypes.c_double * 512
Run Code Online (Sandbox Code Playgroud)
虽然这在大多数情况下DoubleArray都有用,但有时候C库会出现段错误,我想这是因为没有对齐32个字节(可能是库需要这个,因为数据传递给了AVX).
我怎么解决这个问题?
我想从两个文件中读取,直到我到达其中一个文件的末尾.如果出现问题,fstream应该抛出异常.
问题是,当设置eof位时,也会设置坏位或失败位.
ifstream input1;
input1.exceptions(ios_base::failbit | ios_base::badbit);
input1.open("input1", ios_base::binary | ios_base::in);
ifstream input2;
input2.exceptions(ios_base::failbit | ios_base::badbit);
input2.open("input2", ios_base::binary | ios_base::in);
ofstream output;
output.exceptions(ios_base::failbit | ios_base:: badbit);
output.open("output", ios_base::binary | ios_base::out | ios_base::trunc);
char in1, in2, out;
while(!input1.eof() && !input2.eof()) {
input1.read((char*) &in1, 1);
input2.read((char*) &in2, 1);
out = in1^in2;
output.write((const char*) &out, 1);
}
input1.close();
input2.close();
output.close();
Run Code Online (Sandbox Code Playgroud)
这导致
$ ./test
terminate called after throwing an instance of 'std::ios_base::failure'
what(): basic_ios::clear
Run Code Online (Sandbox Code Playgroud)
怎么做对了?
我正在使用Intel(R)Core(TM)i5-4200U CPU @ 1.60GHz,并想知道为什么64位数的乘法比32位数慢.我已经在C中完成了一次测试,结果发现它需要两倍的时间.
我预计它需要相同的时间,因为CPU使用本机64位寄存器,并且数字的宽度无关紧要(只要它们适合64位寄存器).
有人可以解释一下吗?
我正在尝试将自定义包添加到AOSP下frameworks/opt/mypackage.
我提供了一个Android.mk包含以下内容的Makefile:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := mypackage
include $(BUILD_JAVA_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
在另一个框架中,我出去使用这个包.例如,在电话包中.
但不幸的是,电话框架无法使用我的软件包.我将我的软件包添加到LOCAL_JAVA_LIBRARIES电话中的变量中,Android.mk但是当代码执行时它会给我01-11 16:51:01.835: E/AndroidRuntime(1789): java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
我错过了什么?
编辑:设置include $(BUILD_STATIC_JAVA_LIBRARY)而不是include $(BUILD_JAVA_LIBRARY)在我的Makefile中,并将我的包添加到LOCAL_STATIC_JAVA_LIBRARIES框架中运行良好.然而:问题是为什么它不适用于非静态库.