【发布时间】:2019-12-28 05:00:06
【问题描述】:
要使用 pthread_create 和其他 POSIX 线程库函数,我们需要这个标志。我们为什么需要这个?
为什么 /usr 中没有像其他函数或其他系统调用的实现一样实现这些函数的代码?
另一个问题:此外,如果没有此标志,则会出现以下输出:ERROR
我的问题是,为什么我们会在编译时收到这些错误(未定义的引用...)? gcc 应该生成可执行文件,并且在运行时,它应该尝试找到这些符号,对吗? (动态链接)
注意:这些符号(pthread_create、pthread_join)是外部符号(在 preproc 中使用 -E gcc 标志检查)。这与运行时加载的符号不同吗?
【问题讨论】:
-
undefined reference链接器错误由于缺少链接 pthread 库。这可以通过执行-lpthread来解决任何其他要链接的库。指定-pthread意味着-lpthread。 -
@kalyum 确实如此,但我一直在寻找关于我们为什么需要 -pthread 的深入解释。为什么链接器不能自动找到 pthread_create() 的代码所在的动态库
-
“链接器为什么不自动找到动态库”除了 C 库之外,链接器不知道任何库的位置。这不仅与 libpthead 有关,还与所有其他库有关。
标签: c gcc linker operating-system dynamic-linking