c - 使用 -g 在 ArchLinux 中找不到调试符号

标签 c linux gcc makefile gdb

我在 Archlinux 中遇到 GDB 问题:

即使我在我的 Makefile gdb 中添加 -g 也会说 (未找到调试符号)...完成。

但是如果我手动编译 gcc -g *.c 它会工作...

我不知道什么在我的 Makefile 中不起作用?

我的 ArchLinux:

Linux sime_arch 4.13.4-1-ARCH #1 SMP PREEMPT Thu Sep 28 08:39:52 CEST 2017 x86_64 GNU/Linux

我的海湾合作委员会:

gcc version 7.2.0 (GCC)

我的生成文件:

SRC = test.c \
      test2.c

OBJ = $(SRC:.c=.o)

NAME    = test_name

CFLAG   = -Wall -Werror -Wextra

all:     $(NAME)

$(NAME): $(OBJ)
     gcc -g $(OBJ) -o $(NAME) $(CFLAG)

clean:  
    rm -f $(OBJ)

fclean: clean
    rm -f $(NAME)

re: fclean all}

提前致谢

最佳答案

您正在添加 -g仅链接命令。目标文件由 make 的自动编译目标生成。这没有 -g旗帜在里面。

您有 2 个选择 -

  1. 更改变量 CFLAGCFLAGS并添加 -g给它。 CFLAGS由自动编译命令选择,它将创建带有调试信息的目标文件

  2. 添加以下目标 -

    %.o: %.c gcc -g $(CFLAG) -o $@ $<

    $(NAME) 之前目标。

第二种方法可以让您更好地控制目标,但第一种方法是标准的编译方式。

此外,请始终尝试为变量使用标准名称,除非您特别需要单独命名它们。

关于c - 使用 -g 在 ArchLinux 中找不到调试符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673096/

相关文章:

php - 新的 mysqli() 调用可以从 cli 运行,但通过 apache httpd 失败

c++11 - 以下 C++11 代码应该如何工作?

c - 试图理解 *ramVectorTable 如何进入 ramVectorTable[ ]

c - 可能是简单的按位移位问题

php - 使用 php 在一定时间后删除文件的 cronjob 格式是什么?

显示 php 脚本的 phpmyadmin

c++ - iostream.h 在 GCC 中的位置

c - 如何在 Linux 终端中优化 C 编译生成的可执行文件

c++ - Windows 系统中是否存在未缓冲的 I/O?

c++ - 在哪里可以找到 C++ 的 ZwCreateFile 示例?