标签: gnu

如何使GNU Screen在CURRENT工作目录中启动一个新窗口?

默认情况下,当您在GNU Screen中创建一个新窗口时,它将从调用屏幕的目录开始.我想在我目前所在窗口的当前工作目录中的GNU Screen中启动一个新窗口.怎么做?谢谢!

gnu gnu-screen

47
推荐指数
5
解决办法
2万
查看次数

链接共享库时限制符号的可见性

某些平台要求您向链接器提供共享库的外部符号列表.但是,在大多数不需要的unixish系统上:默认情况下,所有非静态符号都可用.

我的理解是,GNU工具链可以选择性地将可见性限制为显式声明的符号.如何使用GNU ld实现这一目标?

linker gnu shared-libraries linker-scripts

45
推荐指数
4
解决办法
2万
查看次数

在Emacs中匹配括号的命令是什么?

在Emacs中匹配括号的命令是什么(相当于%Vim 中的命令)?

linux emacs gnu editor pattern-matching

43
推荐指数
3
解决办法
4万
查看次数

在使用GNU编译器编译期间,在Linux中更改C++应用程序的堆栈大小

在OSX C++程序编译期间g++我使用

LD_FLAGS= -Wl,-stack_size,0x100000000
Run Code Online (Sandbox Code Playgroud)

但在SUSE Linux中,我经常遇到如下错误:

x86_64-suse-linux/bin/ld: unrecognized option '--stack'
Run Code Online (Sandbox Code Playgroud)

和类似的.

我知道可以使用

ulimit -s unlimited
Run Code Online (Sandbox Code Playgroud)

但这并不好,因为单个用户并不总能做到这一点.

如何在单个应用程序中使用GCC增加Linux中的堆栈大小?

gcc gnu

43
推荐指数
4
解决办法
8万
查看次数

如何获取makefile的调用目标?

如何获取GNU的调用目标make Makefile?

例如,我make使用以下命令行调用:

make a-target
Run Code Online (Sandbox Code Playgroud)

如何在Makefile中获取调用目标"a-target"并将其分配给变量?

此外,如果在命令行上指定了多个目标:

make target1 target2 ...
Run Code Online (Sandbox Code Playgroud)

我如何获得所有这些?

gnu makefile gnu-make

40
推荐指数
2
解决办法
2万
查看次数

使用GNU find仅显示叶子目录

我正在尝试使用GNU find来查找不包含其他目录的目录,但可能包含也可能不包含常规文件.

到目前为止,我最好的猜测是:

find dir -type d \( -not -exec ls -dA ';' \)
Run Code Online (Sandbox Code Playgroud)

但这只是给我一长串"."

谢谢!

bash shell gnu find

40
推荐指数
2
解决办法
1万
查看次数

如何从终端使用GDB(Gnu调试器)和OpenOCD进行微控制器调试?

编程ARM微控制器的标准(低成本)方法是使用Eclipse,并在其中插入复杂的工具链.Eclipse肯定有它的优点,但我想要独立于这个IDE.我想发现当我构建(编译 - 链接 - 闪存)我的软件以及运行调试会话时幕后发生的事情.为了更深入地理解,从命令行运行整个过程会很棒.

注意:我使用的是64位Windows 10.但这里解释的大部分内容也适用于Linux系统.请使用管理员权限打开所有命令终端.这可以为您节省很多问题.

1.构建软件

第一个"使命"完成了.我现在能够通过命令行编译和链接我的软件到二进制文件.bin.elf图像.成功的关键是找出Eclipse为特定项目提供make文件的位置.一旦你知道它们在哪里,你所要做的就是打开一个命令终端,然后输入GNU make命令.

在此输入图像描述

你不再需要Eclipse了!特别是如果您可以阅读(并理解)makefile并在项目进展时根据您的需要进行调整.

请注意,在安装SW4STM32(System Workbench for STM32)之后,我在以下文件夹中找到了GNU工具(编译器,链接器,make实用程序,GDB,...):

C:\Ac6\SystemWorkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.7.0.201602121829\tools\compiler\
Run Code Online (Sandbox Code Playgroud)

接下来,我在硬盘上创建了一个新文件夹,并将所有这些GNU工具复制到其中:

C:\Apps\AC6GCC
           |-> arm-none-eabi
           |-> bin
           '-> lib
Run Code Online (Sandbox Code Playgroud)

我将这些条目添加到"环境路径变量":

 - C:\Apps\AC6GCC\bin
 - C:\Apps\AC6GCC\lib\gcc\arm-none-eabi\5.2.1
Run Code Online (Sandbox Code Playgroud)

Huray,现在我已经在我的系统上启动并运行了所有GNU工具!我将以下build.bat文件放在与以下文件夹相同的文件夹中makefile:

@echo off
echo.
echo."--------------------------------"
echo."-           BUILD              -"
echo."--------------------------------"
echo.

make -j8 -f makefile all

echo.
Run Code Online (Sandbox Code Playgroud)

运行这个bat文件应该可以胜任!如果一切顺利,您将获得一个.bin和一个.elf二进制文件作为编译的结果.

2.闪烁和调试固件

自然的后续步骤是将固件刷新到芯片并启动调试会话.在Eclipse中,只需"点击一个按钮" - 至少如果为您的微控制器正确配置了Eclipse.但是幕后会发生什么?我从Dominic Rath(OpenOCD的开发者)那里阅读(部分)硕士论文.你可以在这里找到它:http://openocd.net/.这是我学到的:

  • 单击"调试"图标时,Eclipse将启动OpenOCD软件.Eclipse还为OpenOCD提供了一些配置文件 - 这样OpenOCD就知道如何连接到微控制器."如何连接"并非易事.OpenOCD需要找到合适的USB驱动程序来连接JTAG适配器(例如STLink).JTAG适配器及其USB驱动器通常由您的芯片制造商提供(例如STMicroelectronics).Eclipse还将配置文件移交给OpenOCD,该文件描述了微控制器的规格.一旦OpenOCD知道所有这些事情,它就可以与目标设备建立可靠的JTAG连接.

  • OpenOCD启动两个服务器.第一个是TCP端口4444上的Telnet服务器.它可以访问OpenOCD CLI(命令行界面).Telnet客户端可以连接并向OpenOCD发送命令.这些命令可以是简单的"停止","运行","设置断点",......

  • 这些命令可能足以调试你的微控制器,但很多人已经熟悉Gnu调试器(GDB).这就是为什么OpenOCD还在TCP端口3333上启动GDB服务器.GDB客户端可以连接到该端口,并开始调试微控制器!

  • Gnu调试器是一个命令行软件.很多人更喜欢可视化界面.这正是Eclipse所做的.Eclipse启动了一个连接到OpenOCD的GDB客户端 - 但这对用户来说都是隐藏的.Eclipse提供了一个图形界面,可以在幕后与GDB客户端进行交互.

我已经做了一个数字来解释所有这些事情:

在此输入图像描述

>>启动OpenOCD …

gdb gnu jtag openocd

40
推荐指数
1
解决办法
2万
查看次数

man sscanf:%d 在 C 或 glibc 中已弃用?

我刚刚阅读 glibcsscanf 手册页(来自 Linux 手册页包),发现了以下内容:

\n
\n

可以使用以下转换说明符:
\n(...)

\n

d \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号十进制整数;\nnext 指针必须是指向 的指针int

\n

i \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号整数;next\n指针必须是指向 的指针int。如果整数以 或 开头,则以 16 为基数读取0x0X如果以 开头,则以 8 为基数读取 0;否则以 10 为基数读取。仅使用与\n基数相对应的字符。

\n

o \xc2\xa0\xc2\xa0 已弃用。匹配无符号八进制整数;下一个指针\n必须是指向 的指针unsigned int

\n

(...)

\n
\n
    \n
  • 怎么就%d被废弃了呢?似乎所有int说明符都已弃用。
  • \n
  • 它是什么意思以及有什么可以替代它们?
  • \n
\n

c gnu glibc scanf

39
推荐指数
6
解决办法
4209
查看次数

如何在C++预处理器中检测g ++和MinGW?

我想做的事情如下:

#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
Run Code Online (Sandbox Code Playgroud)

由于我想使用漂亮的PRETTY_FUNCTION,据我所知只有gnu支持所以我需要检测我是否正在编译g ++和MinGW,我该怎么做?我猜我需要知道的是编译器的预处理器定义,就像我在下面为Microsoft做的那样.

#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
Run Code Online (Sandbox Code Playgroud)

如何在C++预处理器中检测g ++和MinGW?

c++ gnu mingw g++ c-preprocessor

37
推荐指数
2
解决办法
2万
查看次数

什么是GLIBC?它是干什么用的?

我正在寻找C标准库的源代码.我的意思是,例如,如何编写cos,abs,printf,scanf,fopen和所有其他标准C函数,我的意思是看他们的源代码.

所以在搜索时,我遇到了GLIBC,但我不知道它到底是什么.它是GNU C库,它包含一些源代码,但它们实际上是什么,它们是标准函数的源代码还是其他东西?它用于什么?

c gnu glibc standard-library

36
推荐指数
3
解决办法
4万
查看次数