【问题标题】:No debugging symbols found in ArchLinux with -g使用 -g 在 ArchLinux 中找不到调试符号
【发布时间】:2017-10-10 18:00:51
【问题描述】:

我在 Archlinux 中的 GDB 有问题:

即使我在我的 Makefile gdb 中添加 -g(no debugging symbols found)...done.

但如果我手动编译 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)

我的 Makefile:

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 添加到链接命令中。自动编译命令没有得到-g 标志。将-g 添加到CFLAGS 本身
  • 标准变量是CFLAGS,使用默认规则,所以你必须使用默认名称变量来为你的对象编译添加标志。有关制作手册的更多信息。

标签: c linux gcc makefile gdb


【解决方案1】:

您仅将-g 添加到链接命令中。目标文件由 make 的自动编译目标生成。这里面没有-g 标志。

你有两个选择 -

  1. 将变量 CFLAG 更改为 CFLAGS 并将 -g 添加到其中。 CFLAGS 被自动编译命令选中,它将创建带有调试信息的目标文件

  2. 添加以下目标 -

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

    $(NAME) 目标之前。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2016-09-16
    • 2013-10-29
    相关资源
    最近更新 更多