帮我找出我尝试编译 glibc 2.24 时出现的错误,但出现以下错误:
./../include/libc-symbols.h:413:26: error: '__EI___errno_location' specifies less restrictive attributes than its target '__errno_location': 'const', 'nothrow' [-Werror=missing-attributes]
| 413 | extern __typeof (name) __EI_##name \
| | ^~~~~
| ./../include/libc-symbols.h:417:29: note: in expansion of macro '__hidden_ver1'
| 417 | # define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
| | ^~~~~~~~~~~~~
| ./../include/libc-symbols.h:468:32: note: in expansion of macro 'hidden_def'
| 468 | # define libc_hidden_def(name) hidden_def (name)
| | ^~~~~~~~~~
| errno-loc.c:28:1: note: in expansion of macro 'libc_hidden_def'
| 28 | libc_hidden_def …Run Code Online (Sandbox Code Playgroud) 最近我遇到了一个关于 LTO 的奇怪问题,根据是否使用,-ffast-math我的“pow”(in)调用得到了不一致的结果。cmath-flto
$ g++ --version
g++ (GCC) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Sep 3 2019 /lib64/libc.so.6 -> libc-2.17.so
$ ll /lib64/libm.so.6
lrwxrwxrwx 1 root root 12 Sep 3 2019 /lib64/libm.so.6 -> libm-2.17.so
$ cat /etc/redhat-release
CentOS Linux release …Run Code Online (Sandbox Code Playgroud) 可能重复:
Malloc线程安全吗?
我听说glibc malloc()不是线程安全的,因为同时调用malloc()的进程的几个线程将导致未定义的行为.我的问题是如果一个线程调用free()将另一个线程调用malloc(),这是否会导致未定义的行为?
在以下代码中我收到一个错误:
333 glGenBuffers(surftotal, uiVBO);
334 {
335 for(surfnum=0; surfnum<surftotal; ++surfnum)
336 {
337 glBindBuffer(GL_ARRAY_BUFFER, uiVBO[surfnum]);
338 size_t buf_size = 9*sizeof(GLfloat)*triNum[surfnum];
339 GLfloat* const pData = (GLfloat*)malloc(buf_size);
340 for(i=0; i<triNum[surfnum]; ++i)
341 printf("%d...",triNum[surfnum]);
342 {
343 memcpy(pData+i*9, triArray[surfnum][i].pt1, 3*sizeof(GLfloat));
344 memcpy(pData+i*9+3, triArray[surfnum][i].pt2, 3*sizeof(GLfloat));
345 memcpy(pData+i*9+6, triArray[surfnum][i].pt3, 3*sizeof(GLfloat));
346 }
347 glBufferData(GL_ARRAY_BUFFER, buf_size, pData, GL_STATIC_DRAW);
348 free(pData);
349 }
350 glBindBuffer(GL_ARRAY_BUFFER, 0);
351 glEnableVertexAttribArray(VERTEX_ARRAY);
352 for(surfnum=0; surfnum<surftotal; ++surfnum)
353 {
354 glBindBuffer(GL_ARRAY_BUFFER, uiVBO[surfnum]);
355 glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0);
356 glDrawArrays(GL_TRIANGLES, …Run Code Online (Sandbox Code Playgroud) 如果read()的返回值与缓冲区大小相同,我该如何阅读其余信息?如果再次调用read,它会读取下一个数据块,还是从头开始读取,还是未读入缓冲区的信息永久丢失?
我在内存分配/释放方面遇到了一些麻烦.
在"64位机器"上,我运行了一些没有错误的c代码.如果我在32位机器上运行相同的代码(重新编译后,obv.)我有一些分段故障的麻烦.
这是我的glib-c版本:
包:libc6
新增:是状态:已安装自动安装:无版本:2.13-20ubuntu5优先级:必需部分:libs维护者:Ubuntu开发人员未压缩大小:10,7 M取决于:libc-bin(= 2.13-20ubuntu5),libgcc1,tzdata建议:glibc-doc,debconf | debconf-2.0,locales冲突:belocs-locales-bin,belocs-locales-bin,libc6-amd64,libc6-amd64,prelink(<0.0.20090925),prelink(<0.0.20090925),tzdata(<2007k-1) ,tzdata(<2007k-1),tzdata-etch,tzdata-etch中断:nscd(<2.13),nscd(<2.13),libc6(!= 2.13-20ubuntu5)替换:belocs-locales-bin,belocs-locales- bin,libc6-amd64,libc6-amd64,libc6(<2.13-20ubuntu5)提供:glibc-2.13-1描述:libreria C GNU嵌入式:librerie condivise
在32位机器上,版本是:
2.06-01
更重要的是,这里有一些令我疯狂的代码片段:
void estrai_libro (FILE* fileDescriptor, Libro* libroLetto) {
char* ptr_buf;
size_t n;
size_t lung;
ssize_t nread;
/* ---- questo blocco di istruzioni verrà utilizzato per tutti
i campi della struttura Libro passata in input */
/* inizializzo ptr_buf e n rispettivamente a NULL e a 0 in moda da
da sfruttare al meglio la getline(...)*/
ptr_buf = NULL;
n = 0;
/* copio …Run Code Online (Sandbox Code Playgroud) 我有" *glibc检测到/ home/ubuntu [....]:双免费或腐败(fasttop):0x09851168**"问题.
调试我找出了似乎是问题根源的那一行:
data[i]->~Class();
Run Code Online (Sandbox Code Playgroud)
这是指
class Class {
public:
Class();
Class(char *name, double value);
virtual ~Class();
char *name;
double value;
private:
};
Run Code Online (Sandbox Code Playgroud)
然后
Class::Class() {
}
Class::Class(char* name, double value){
this->name = new char[std::strlen(name)];
std::strcpy(this->name, name);
this->value = value;
}
Class::~Class() {
delete name;
}
Run Code Online (Sandbox Code Playgroud)
现在,显然我在那里做错了什么.任何人都可以告诉我什么?
我有一个小代码,它在堆上分配一些内存,然后在它使用后尝试释放它.我在内存映射中遇到此错误.
守则是::
void merge(int *arr, int start, int mid, int end)
{
int i = 0, j = 0, k = 0, tmp1 = 0, siz = 0;
int *pt = NULL;
j = start, k = mid+1, tmp1 = start;
siz = (end - start) + 1;
if ((pt = malloc(siz * sizeof(int))) == NULL) /* line 32 */
{
printf("\n ERROR Aloocating mem \n");
return;
}
while (j <= mid && k <= end)
{
if (arr[j] <= …Run Code Online (Sandbox Code Playgroud) 我试图对glibc做一些破解,我想知道是否有可能重新定义类似函数的宏?
例如,<tgmath.h>有以下宏:
#define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1)
Run Code Online (Sandbox Code Playgroud)
如何重新定义expm1为:
#define expm1(Val) __TGMATH_UNARY_REAL_IMAG (Val, expm1, cexpm1)
Run Code Online (Sandbox Code Playgroud)
我想我必须取消之前的定义,但我不知道该怎么做.
我下载了几个版本,glibc即2.18,2.19,2.20,2.23,我试图找到该文件iso646.h但找不到它.我认为它是glibc的标准部分所以它应该在那里.任何人都知道它为什么不存在?
但是,我在/ usr/lib/gcc目录中的本地机器上找到了它.所以我假设它是用gcc安装的.但我仍然不知道为什么我不能在glibc来源中找到它.我正在粘贴我在下面找到的内容:
/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY …Run Code Online (Sandbox Code Playgroud)