【发布时间】:2019-07-03 19:32:14
【问题描述】:
我是在 Linux 上编写程序的新手。我有一个使用shm_open、ftruncate、mmap、fork 和wait 的模块程序。我用gcc -c 编译了这个程序,然后用ld -lrt 链接它(shm_open 需要librt),我得到一个奇怪的链接器错误:
undefined reference to symbol 'waitpid@@GLIBC_2.2.5'
wait 的手册页说
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
waitid():
Since glibc 2.26: _XOPEN_SOURCE >= 500 ||
_POSIX_C_SOURCE >= 200809L
Glibc 2.25 and earlier:
_XOPEN_SOURCE
但是将#define _XOPEN_SOURCE 放在代码中并没有帮助,如果我这样做了
gcc -c -D _XOPEN_SOURCE
编译器说ftruncate的隐式声明。
我在 VMWare 下运行 Ubuntu。 GCC 是版本gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609。
可能出了什么问题?
【问题讨论】:
-
你能尝试用
gcc -D_GNU_SOURCE -c编译吗? glibc 2.2.5 中有一个waitpid -
谢谢你,但是......不,它也不起作用......
标签: c glibc undefined-reference