标签: gnu

gcc 11 未进行调试。它显示“as:无法识别的选项'--gdwarf-5'”

我在我的机器(linux 20.04)上使用自制软件安装了 gcc 11。而且它没有在 vscode 上运行,如图所示

as:无法识别的选项“--gdwarf-5”

不知道是不是路径问题。因为当我安装brew时它告诉我

Warning: /home/linuxbrew/.linuxbrew/bin/ is not in your PATH.
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,它建议使用这三个命令

echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /home/hasib/.profile
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/hasib/.profile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
Run Code Online (Sandbox Code Playgroud)

所以,我做了那些。我不知道这是否搞砸了路径。我对Linux有点陌生,所以很困惑。只是想在 vs 上运行 gcc-11

这是我的tasks.json 文件:

{
"tasks": [
    {
        "type": "cppbuild",
        "label": "C/C++: g++ build active file",
        "command": "/usr/bin/g++",
        "args": [
            "-fdiagnostics-color=always",
            "-g",
            "${file}",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}"
        ],
        "options": {
            "cwd": "${fileDirname}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        },
        "detail": …
Run Code Online (Sandbox Code Playgroud)

c++ linux gnu dwarf gcc11

1
推荐指数
1
解决办法
6092
查看次数

`int` 是原子类型吗?

引用gnu

实际上,您可以假设 int 是原子的。您还可以假设指针类型是原子的;非常方便。这两个假设在 GNU C 库支持的所有机器上以及我们所知的所有 POSIX 系统上都是成立的。

这怎么可能?我见过的与锁相关的所有示例都是用int计数器制作的,例如https://www.delftstack.com/howto/c/mutex-in-c/

c concurrency gcc gnu atomic

1
推荐指数
1
解决办法
561
查看次数

为什么入口点地址是0x800107d,但第一条指令开始于0x800107c

使用arm-none-eabi-readelf -h ideself.elf可以找到:

Entry point address:               0x800107d
Run Code Online (Sandbox Code Playgroud)

使用arm-none-eabi-objdump -D ideself.elf可以找到:

0800107c <Reset_Handler>:                       
 800107c:   f8df d034   ldr.w   sp, [pc, #52]   ; 80010b4 <LoopForever+0x2>
 8001080:......................................................
Run Code Online (Sandbox Code Playgroud)

为什么启动reset_handler不等于0x800107d而不是0x800107c

0x800107c 中的字节不执行?执行 3/4 四字节指令 ?

embedded arm gnu stm32 cortex-m

1
推荐指数
1
解决办法
106
查看次数

(GNU+Linux) 多个线程同时调用malloc()

我在网上读到,大多数现代 UNIX 系统默认都带有线程安全的 malloc()。我知道这仅仅意味着一个线程可以安全地调用 malloc(),而另一个线程已经处于 malloc() 调用本身的中间。

我正在使用 pthreads 进行多线程处理。我有一个 12 核 CPU,每个核 2 个线程。所以总共 24 个线程。另外,我正在使用 malloc 的 GNU C 库实现。

我的问题是关于在不锁定/等待/阻塞的情况下同时执行它们。我在一个答案中读到,当多个线程同时调用 malloc() 时,它“使用内部锁定机制”。

所以这就是我的问题:

如果 8 个线程恰好同时调用 malloc(),是否会有 8 个 malloc 调用并行发生,并且它们不会相互干扰?

或者当一个线程调用 malloc() 时,其他线程必须等待该线程的 malloc 调用完成才能继续执行自己的 malloc 调用?

(我问这个问题是因为我只是对我的一个 C 程序进行了多线程化,该程序确实广泛使用了 malloc() 和 free(),并且加速与所使用的线程不是线性的,尽管逻辑上它应该是线性的,因为没有一个线程依赖于任何全局的东西,所以不应该发生争用(无论如何在软件中)。我的场景很简单:每个线程调用一个函数,该函数在 1 个线程上大约需要 315 秒才能完成(无多线程),这使得数以百万计的其他调用我定义的函数。由于函数代码是只读的,因此并行运行此顶级函数的 X 线程的加速应该没有问题,因为每个线程都使用自己的参数调用它,并且没有线程依赖于任何东西全局或共享。当我使用 4 个线程时,由于某种原因,时间从 315 秒增加到 710 秒,而当我使用 8 个线程时,时间增加到 1400 秒,尽管每个线程都在做完全相同的工作。没有多线程的单线程正在执行,并且需要 315 秒才能完成。那么,到底是什么??)

c malloc multithreading gnu pthreads

1
推荐指数
1
解决办法
147
查看次数

GNU通用公共许可证错误?

我开发了一个程序,它利用串行编程从串口读写,并将值放在Ubuntu环境下的数据库中.最近,我使用boost lib添加了一些功能来过滤读取功能等.但是当我运行程序时,比如在15-20分钟之后,我得到了分段错误.当我检查我在程序中定义的日志文件时,我得到了以下行.我不知道究竟是什么.有人可以指导我.

a copy of the GNU General Public License          along with this
Run Code Online (Sandbox Code Playgroud)

程序; 如果没有,请写信给Free Software Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA","NU General Public License
以及该程序; 如果没有,请写信给Free Software
Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA","
以及该程序; 如果没有,请写信给Free Software
Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA","ram; 如果没有,请写信给Free Software
Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA","e Free Software Foundation,Inc.,59 Temple Place,Suite 330,Boston,MA","tion,Inc .,59 Temple Place,Suite 330,Boston,MA","ace,Suite 330,Boston,MA","MA","","","
","HUB-ARM")

谢谢和问候,SamPrat.

c++ boost serial-port gnu

0
推荐指数
1
解决办法
196
查看次数

为什么GNU make的vpath命令如此弱?

我正在优化一个非常大的项目的一些makefile,我发现GNU make的vpath命令只能做非常有限的工作.例如:

vpath %.o $(OBJPATH)
Run Code Online (Sandbox Code Playgroud)

表示通过OBJPATH搜索路径值中的所有目标文件.这意味着/dir1/../dir2/obj1.o并且/dir3/../dir2/obj1.o是相同的文件,但是,如果我已经做了/dir1/../dir2/obj1.o,当工具思考规则时/dir3/../dir2/obj1.o,它仍然无法找到它,并且必须重新制作/dir3/../dir2/obj1.o,即使它代表相同的文件/dir1/../dir2/obj1.o.

我检查了GNU make源代码; 它使用哈希表来比较文件路径字符串,因此如果字符串不同,虽然它们代表相同的文件,但它们仍然无法匹配使用vpath.

为什么不用vpath更强大的功能实现?

gnu makefile

0
推荐指数
1
解决办法
2487
查看次数

这个powerpc指令有什么意义?

这条指令来自powerpc uboot.

lis r3 CONFIG_SYS_DEFAULT_IMMR@h
Run Code Online (Sandbox Code Playgroud)

特别是"@h"是什么意思?

另一个问题:

lwz r4,0(r3)
Run Code Online (Sandbox Code Playgroud)

特别是"0(r3)"是什么意思?

谢谢!

assembly gnu powerpc

0
推荐指数
1
解决办法
3300
查看次数

:意外令牌附近的语法错误`('?

谁能说出问题出在哪里?

someone@someone:~/Desktop$ cat morning.c
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main (int argc, char** argv)
{ 
  printf ("Good Morning") ; 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)
someone@someone:~/Desktop/9raya$ ./morning.c
./morning.c: line 2: syntax error near unexpected token `('
./morning.c: line 2: `int main (int argc, char** argv)'
Run Code Online (Sandbox Code Playgroud)

我真的不知道问题出在哪里.

c linux gnu

0
推荐指数
1
解决办法
2393
查看次数

gcc生成编译时错误,因为无法识别__TIMESTAMP__和其他一些已定义的构建变量

我正在使用基于eclipse和GCC的IDE的现有示例来编译我的嵌入式EFTPOS设备的应用程序.但在以下几行:

fprintf(stdout, "** Compilation date: %s \n", __TIMESTAMP__);
fprintf(stdout, "**** SDK release: %s \n", __SDK_RELEASE__);
fprintf(stdout, "**** ToolChain release: %s \n", __TOOLCHAIN_RELEASE__);
Run Code Online (Sandbox Code Playgroud)

我收到这些编译时错误,似乎编译器无法识别这些宏.

Symbol '__TIMESTAMP__' could not be resolved    main.c
Symbol '__SDK_RELEASE__' could not be resolved  main.c
Symbol '__TOOLCHAIN_RELEASE__' could not be resolved    main.c
Run Code Online (Sandbox Code Playgroud)

如果我尝试fprintf(stdout, "** Compilation date: %s \n", __TIME__);它编译成功.为什么编译器识别__TIME__ 宏但返回错误__TIMESTAMP__?您也可以在构建变量中看到__SDK_RELEASE____TOOLCHAIN_RELEASE__定义它们.

图片链接

编辑: 感谢您的回复,请原谅我缺乏提供的信息.在C/C++ build - > setting-> symbols中:

'__SDK_RELEASE__="${SDK_RELEASE}"'
'__TOOLCHAIN_RELEASE__="${TOOLCHAIN_RELEASE}"'
Run Code Online (Sandbox Code Playgroud)

定义,然后__SDK_RELEASE__,__TOOLCHAIN_RELEASE__必须__TIME__是有效的.我的意思是,如果宏有效__TIMESTAMP__ …

c eclipse embedded gcc gnu

0
推荐指数
1
解决办法
323
查看次数

为什么#define _LARGEFILE_SOURCE会破坏这些函数指针?

我有以下代码,其中正在加载的共享库作为预编译的二进制文件提供.它是用linaro工具链编译的.

gbm_create_device(int fd)
{
   struct gbm_device *gbm = NULL;
   void *module;
   const struct gbm_backend *backend = NULL

   module = dlopen("/usr/lib/gbm/gbm_pvr.so", RTLD_NOW | RTLD_GLOBAL);
   backend = dlsym(module, "gbm_backend");
   gbm = backend->create_device(fd);

   gbm->surface_create(gbm, width, height, format, flags);
}

struct gbm_device {
   /* Hack to make a gbm_device detectable by its first element. */
   struct gbm_device *(*dummy)(int);

   int fd;
   const char *name;
   unsigned int refcount;
   struct stat stat;

   ...
   void (*bo_destroy)(struct gbm_bo *bo);

   struct gbm_surface *(*surface_create)(struct gbm_device *gbm,
                                         uint32_t width, uint32_t height,
                                         uint32_t …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gnu compilation shared-libraries

0
推荐指数
1
解决办法
67
查看次数