我在我的机器(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) 引用gnu:
实际上,您可以假设 int 是原子的。您还可以假设指针类型是原子的;非常方便。这两个假设在 GNU C 库支持的所有机器上以及我们所知的所有 POSIX 系统上都是成立的。
这怎么可能?我见过的与锁相关的所有示例都是用int计数器制作的,例如https://www.delftstack.com/howto/c/mutex-in-c/。
使用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 四字节指令 ?
我在网上读到,大多数现代 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 秒才能完成。那么,到底是什么??)
我开发了一个程序,它利用串行编程从串口读写,并将值放在Ubuntu环境下的数据库中.最近,我使用boost lib添加了一些功能来过滤读取功能等.但是当我运行程序时,比如在15-20分钟之后,我得到了分段错误.当我检查我在程序中定义的日志文件时,我得到了以下行.我不知道究竟是什么.有人可以指导我.
Run Code Online (Sandbox Code Playgroud)a copy of the GNU General Public License along with this程序; 如果没有,请写信给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.
我正在优化一个非常大的项目的一些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更强大的功能实现?
这条指令来自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)"是什么意思?
谢谢!
谁能说出问题出在哪里?
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)
我真的不知道问题出在哪里.
我正在使用基于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__ …
我有以下代码,其中正在加载的共享库作为预编译的二进制文件提供.它是用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)