Android平台使用什么libc实现?使用哪种malloc实现(ptmalloc或tcmalloc或其他任何东西)?
我必须使用静态验证C源的一些(半)自动验证软件(CBMC (链接)).支持浮点,但没有所有数学函数的定义.尝试检查是否可以用它来检查数字软件.
所以我需要这些功能.我在找一些math.h没有协处理器使用的定义(例如sqrt,pow,其余部分tan; int/ float/ double).
当我在一些Linux发行版附带的libc(也许现在是eglibc)中查找它时,我总是达到一个点,其中有一些处理器内在函数意味着硬件sqrt函数.
我需要的是一个支持数学函数的库,具有以下特征:
到目前为止,我搜索了各种libc实现,特别是有关嵌入式系统的实现.我认为这些库中的大多数都是针对编译程序的可移植性和大小,但很难说它们是否使用特定于处理器的指令.
有人能给我一些关于这些数学库结构的简短介绍.他们如何调度各种版本(例如特定的协处理器)?
这些不同前缀在文件名中的含义是什么?e_sqrt.c,k_sin,s_sin?
我会很高兴听到一些图书馆这可能是对我有用.我宁愿选择一个库,但是当它有必要时,也可以寻找一些单一的函数实现并构建一个小型库.我不会使用math.h中定义的所有函数.
这个和这个 SO帖子都说Java Math Implementation是基于fdlibm的,这听起来这个库是可行的.有关这个库的更多信息的人我应该知道吗?
似乎我有很多可能性,包括以下两个:
这是我的第一篇文章,它涵盖了我一直想要开发和关闭一年的东西.
基本上它归结为以下内容:我有一个newlib的副本,我正在尝试使用LPC2388(来自NXP的ARM7TDMI).这是在使用arm-elf-gcc的linux机器上
我的问题是我一直在看很多关于移植newlib的教程,他们都谈论了存根(如exit,open,read/write,sbrk),我对它有很好的了解如何实现所有这些功能.但是我应该把它们放在哪里?
我有来自sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz的newlib发行版,在我找到"syscalls.c"之后(在newlib-1.18.0/newlib/libc/sys /中)手臂),它包含了所有我必须更新存根的,但是他们都填满了,而查看完代码(它不似乎没有crt0.s中,其本身并不与我的工作芯片)的工作.
我应该自己消灭这些功能,然后重新编写它们吗?或者我应该把它们写在别的地方.我应该使用我的"架构"的名称在newlib/libc/sys中创建一个全新的文件夹并更改目标以匹配吗?
我也很好奇,如果在将它作为一个开源项目发布之后有适当的礼节分配这样的东西.我目前有一个下载binutils,arm-elf-gcc,newlib和gdb的脚本,并编译它们.如果我正在修改newlib目录中的文件,我应该提交一个我的脚本自动应用的补丁吗?或者我应该将修改后的newlib添加到存储库中吗?
谢谢你好好阅读!接下来是对我正在做的更详细的细分.
我正在基于Uzebox项目(http://belogic.com/uzebox/)松散地构建一个ARM视频游戏控制台.
当我试图弄明白时,我已经从各种不同的资源中做了各种各样的事情.你可以在这里阅读我的冒险开始(sparkfun论坛,没有人回应,因为我自己解决):forum.sparkfun.com/viewtopic.php?f = 11&t = 22072
我通过阅读有关移植newlib的Stackoverflow问题并查看了一些不同的教程(如wiki.osdev.org/Porting_Newlib),但他们也告诉我实现存根而不提及哪里,谁,什么,何时或如何!
我需要排序一个指向struc的指针数组.实际上,我需要在地址之间进行搜索,以查看数组中是否存在指向结构的指定指针.不幸的是,我在这些结构中没有任何"可比性"的东西,所以我只想按地址排序.我的代码是这样的:
item* arr[SIZE];
//something is inserted
qsort(arr, SIZE, sizeof(item*), (void*)compare_funct);
//CUT
bsearch(curr, arr, SIZE, sizeof(item*), (void*)compare_funct);
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个compare_funct,只是将指针转换为int并返回它们的区别,但它似乎不起作用.特别是,当我进行bsearch时,即使我知道元素包含在数组中,我总是得到一个NULL作为返回值.
可能重复:
尝试设置char数组的字符时程序崩溃
我有一个示例代码,按预期工作:
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
/*
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...除非我将char str []更改为char*str,它不应该在语义上产生任何差异:
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char * str ="- This, a sample string.";
char * …Run Code Online (Sandbox Code Playgroud) 它是一个生成随机厄米特矩阵厄米特矩阵的小代码.
我在每次调用rand()之前调用了srand().但输出中仍然没有随机性.
我使用c99的复杂数据类型功能来创建一个埃尔米特矩阵.我不确定我错在哪里:(
#include <stdio.h>
#include <math.h>
#include <complex.h>
#include <stdlib.h>
#include <time.h>
#define MATSIZE 5
#define RAND_RANGE 100
double complex mat[MATSIZE][MATSIZE];
void gen_mat()
{
int i =0,j;
int real;
int img;
for( ;i < MATSIZE; i++)
{
srand(time(NULL));
real = rand()%RAND_RANGE + 1;
srand(time(NULL));
img = rand()%RAND_RANGE + 1;
for(j = MATSIZE; j != i ; j--)
{
mat[i][j] = real + img * I;
mat[j][i] = conj(mat[i][j]);
}
srand(time(NULL));
if(i == j)
mat[i][i] = rand()%RAND_RANGE + …Run Code Online (Sandbox Code Playgroud) 在调试我的应用程序时,如果我在GDB中断并尝试打印errno,甚至从检查errno的函数内部,我从GDB获得以下错误:
(gdb) print errno
Cannot find shared library `/usr/lib/debug/lib/libc-2.11.1.so' in dynamic linker's load module list
Run Code Online (Sandbox Code Playgroud)
我试过的事情:
该应用程序似乎运行正常,所以我无法想象libc本身搞砸了.有任何想法吗?
我正在使用crunnchbang linux 64位.我安装了原子文本编辑器,但是当我尝试启动它时它给出了错误.输出如下:
shunya@crunchbang:~$ atom
shunya@crunchbang:~$ /usr/share/atom/atom: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/share/atom/atom)
/usr/share/atom/atom: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/share/atom/libchromiumcontent.so)
/usr/share/atom/atom: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/share/atom/libgcrypt.so.11)
/usr/share/atom/atom: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /usr/share/atom/libgcrypt.so.11)
Run Code Online (Sandbox Code Playgroud)
从输出中可以清楚地看到它需要一些名为GLIBC_2.5和2.14的软件包.我该如何安装这些要求?我试图搜索突触包管理器,如果我搜索GLIBC有很长的包列表.我无法分辨要安装哪一个.
但是一旦我做了GLIBC_2.14或-2.14,就没有剩下的选择了.
*更新:尝试
sudo apt-get install libc6
Run Code Online (Sandbox Code Playgroud)
我得到输出,因为libc6已经是最新版本了.
考虑这个代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
//this file exists and contains data: "ABCDEFGHIJKLM"
FILE* file = fopen("file.txt", "r");
char data[4];
long int pos = ftell(file);
fseek(file, 0, SEEK_SET);
fread(data, 4, 1, file);
fseek(file, pos, SEEK_SET);
printf("ftell: %d\n", ftell(file));
printf("lseek: %d\n", lseek(fileno(file), 0, SEEK_CUR));
fread(data, 1, 4, file);
//this correctly prints A
//but external function needs fileno(file) that has wrong pos
printf("%c\n", data[0]);
fclose(file);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该计划的结果令人惊讶:
ftell: 0
lseek: 14
A
Run Code Online (Sandbox Code Playgroud)
我正在尝试修复我的应用程序中的错误,但我确定前一段时间此程序的结果应该是0, 0(换句话说,从来没有在我的应用程序中出现此错误). …