在OS X上编译简单的C程序时出现clang链接器错误

clang linker error when compiling simple C program on OS X

提问人:Steven Lu 提问时间:7/22/2014 最后编辑:GlorfindelSteven Lu 更新时间:4/27/2022 访问量:1079

问:

我是从这篇文章中构建这段代码

我正在使用推荐的命令来构建它:gcc -Wall -o keyboard_leds keyboard_leds.c -framework IOKit -framework CoreFoundation

$ curl -O http://osxbook.com/book/bonus/chapter10/kbdleds/download/keyboard_leds.c
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11542  100 11542    0     0   139k      0 --:--:-- --:--:-- --:--:--  140k

$ clang -Wall -o keyboard_leds keyboard_leds.c -framework IOKit -framework CoreFoundation
Undefined symbols for architecture x86_64:
  "_print_errmsg_if_err", referenced from:
      _create_hid_interface in keyboard_leds-d14ed5.o
  "_print_errmsg_if_io_err", referenced from:
      _create_hid_interface in keyboard_leds-d14ed5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

$

代码非常简单,如果有点过时(6 年)。我在任何地方都看不到任何提及以下划线开头的符号。我可能遗漏了一些简单的东西,但我完全不知道这些符号的来源。

什么给了?我可以注释掉调用以使其编译。

c clang linker-errors

评论

1赞 WhozCraig 7/22/2014
这是一个符合 C99 标准的东西。您可以在此处阅读有关它的更多信息,但就您而言,最简单的解决方法是从定义中删除前导码(代码所在,而不是原型所在)。你可以添加,但我不推荐它。inline-std=gnu89
0赞 Steven Lu 7/22/2014
哦,这很奇怪。我差点试过......我试图删除声明(因为我认为它们没有任何作用),但无济于事。谢谢!把这个回答给你,我会接受的
0赞 Steven Lu 7/22/2014
根据链接的解释,使用优化进行编译似乎将导致成功的编译。我用 .-O2
0赞 WhozCraig 7/22/2014
它会的,但显然调试起来很麻烦(我可以确认,顺便说一句,编译确实成功了,而且很可能我正在运行类似于您的叮当声)。我拒绝发布答案,直到我能合理地确认这不是其他东西的重复。这似乎应该在过去咬过某人。如果我在今天晚上之前找不到任何东西,我会发布类似于我的第一条评论的内容。希望没关系。-O2
1赞 Jean-François Fabre 12/19/2017
内联函数“未定义符号”错误的可能重复

答: 暂无答案