我想从Fortran调用一个C api函数.C函数接受一个字节数组:
void image(const void *bitmap, int w, int h);
Run Code Online (Sandbox Code Playgroud)
其中三个连续的字节*bitmap代表一个RGB颜色tripple,并unsigned char在C 中解释.我想在Fortran中初始化位图并负责在C.内部绘图.Fortran中的当前定义使用
integer*1 rgbImage(6,2)
Run Code Online (Sandbox Code Playgroud)
例如,初始化2x2的图像,但编译器不接受赋值
rgbImage(1,1) = 255
Run Code Online (Sandbox Code Playgroud)
得到红色.我已经看到了使用的提示BYTE,UNSIGNED*1,LOGICAL*1无符号字节单,但gfortran(MacPort的GCC 4.4或4.6在Mac OS X)不符合任何一方的真的很开心.我可能会因为作弊和分配价值-1而逃脱255,但是使用起来非常不舒服.编译器标志-fno-range-check有助于编译代码,但可能在其他Fortran编译器中不可用,我认为它是一个丑陋的解决方案(我仍然希望捕获其他警告).值'FF'X或'11111111'B也被识别为32位整数.
非常希望代码可以跨不同的Fortran编译器移植.
简短的问题:如何在任何Linux发行版上可靠地区分mips,mipsel,mips64和mips64el?
更长的解释:
我们为许多架构提供静态构建/分发独立二进制文件(用于TeX).安装脚本通常运行uname -s并uname -m确定操作系统和体系结构.然后根据该决定从服务器获取二进制文件,因此它需要可靠地工作.确实如此.几乎除了Mac OS X 10.6和Debian之外的所有地方.Mac将在运行64位应用程序的操作系统上报告i386,而Debian报告mips64用于32位操作系统.
mips64上的 Debian 正确报告处理器类型,但这至少有两个原因对我没有帮助:
以下是系统命令的一些输出:
$ file my_binary_name
my_binary_name: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, stripped
$ dpkg-architecture
DEB_BUILD_ARCH=mipsel
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=mipsel
DEB_BUILD_ARCH_BITS=32
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_GNU_CPU=mipsel
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=mipsel-linux-gnu …Run Code Online (Sandbox Code Playgroud)