gpt4 book ai didi

gcc - 编译错误gcc -lpthread位置

转载 作者:行者123 更新时间:2023-12-02 10:51:52 28 4
gpt4 key购买 nike

这项工作:

    gcc a.o b.o -o a -lpthread

这不起作用:
    gcc -lpthread a.o b.o -o a

并显示如下错误:
undefined reference to `pthread_create'

因此,当我使用Makefile进行编译时,它会生成
    gcc -lpthread a.o b.o -o a

哪个不起作用。

有任何想法吗?

PS:我正在使用gcc 4.6.3/Ubuntu 12.04

最佳答案

首先,在使用pthread进行编译时,您要使用-pthread而不是-lpthread--pthread可能会启用程序在多线程环境中运行所需的一些编译时选项。

问题实际上与您的命令行无关,而是GNU ld的问题。 GNU ld在遇到-lXXX选项时,读取libXXX.solibXXX.a定义的所有符号,检查在命令行中-lXXX选项之前指定的文件中是否提到了这些符号,而忽略了其余的符号符号。

换句话说:目标文件和库的命令行顺序会更改链接器的行为。

当计算机的内存确实有限时,这可能是合理的,但如今,它只是很长一段时间以来被遗忘的傻东西,应该早就已经解决了。

当然,可能会出现与定义相同符号的多个库链接的问题,但是肯定有更聪明的方法来允许此类情况的预期行为。

底线:对于GNU ld(由gcc调用),只有问题中的第一个命令才有效,因为ld仍然存在于先前的计算时代。

为了更加合理,在链接和编译与pthread相关的程序时,请同时使用-pthread

关于gcc - 编译错误gcc -lpthread位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com