为什么 -pthread 工作但 -lpthread 不工作?
Why -pthread working but -lpthread does not?
我已成功将我的简单 gtest 测试与命令链接起来
g++ -o build/test1 build/test1.o -pthread -lgtest -lgtest_main
但我对选项 -pthread 很好奇。为什么它不能与 -lpthread 一起使用
它与 -lgtest 一起工作。
以及为什么 -gtest 不工作但没有 "l" 的 -pthread 工作...
在 gcc
中,-pthread
标志指示编译器它应该设置允许线程代码的东西。我相信(但我不是绝对确定)它所做的 一个 是添加 -lpthread
以便链接器在搜索未解析的符号时使用相关的库。
但是,它还做其他事情,比如设置-D_REENTRANT
来指定使用可重入代码。
换句话说,-lpthread
本身可能不够,因为它 仅 指定应搜索线程库。我倾向于使用 both 来确定它做了正确的事情 - 是的,我 am 偏执狂:-)
I have successfully linked my simple gtest test with command g++ -o
build/test1 build/test1.o -pthread -lgtest -lgtest_main
but i'm curios about options -pthread. Why it is not working with
-lpthread as it working with -lgtest.
命令行中库 link 选项的顺序很重要。我认为您尝试简单地将 -pthread
更改为 -lpthread
,以获得此:
g++ -o build/test1 build/test1.o -lpthread -lgtest -lgtest_main
但是如果 gtest 或 gtest_main 库使用任何 pthreads 函数,那么 -lpthread
需要出现在库列表中的后面(如有必要,可以多次列出库):
g++ -o build/test1 build/test1.o -lgtest -lgtest_main -lpthread
虽然这不是使用 g++
构建 pthreads 代码的合适方法(如您的其他答案中所述),但它通常确实有效。
And why -gtest doest not working but -pthread without "l" is
working...
-pthread
是 GCC 编译器套件识别的 specific 编译选项。 -lgtest
是 general -l
选项与 gtest
作为选项参数的组合。也可以编写类似的 -lpthread
选项,原则上,它与 -pthread
.
的含义有些不同
我已成功将我的简单 gtest 测试与命令链接起来
g++ -o build/test1 build/test1.o -pthread -lgtest -lgtest_main
但我对选项 -pthread 很好奇。为什么它不能与 -lpthread 一起使用 它与 -lgtest 一起工作。
以及为什么 -gtest 不工作但没有 "l" 的 -pthread 工作...
在 gcc
中,-pthread
标志指示编译器它应该设置允许线程代码的东西。我相信(但我不是绝对确定)它所做的 一个 是添加 -lpthread
以便链接器在搜索未解析的符号时使用相关的库。
但是,它还做其他事情,比如设置-D_REENTRANT
来指定使用可重入代码。
换句话说,-lpthread
本身可能不够,因为它 仅 指定应搜索线程库。我倾向于使用 both 来确定它做了正确的事情 - 是的,我 am 偏执狂:-)
I have successfully linked my simple gtest test with command g++ -o build/test1 build/test1.o -pthread -lgtest -lgtest_main
but i'm curios about options -pthread. Why it is not working with -lpthread as it working with -lgtest.
命令行中库 link 选项的顺序很重要。我认为您尝试简单地将 -pthread
更改为 -lpthread
,以获得此:
g++ -o build/test1 build/test1.o -lpthread -lgtest -lgtest_main
但是如果 gtest 或 gtest_main 库使用任何 pthreads 函数,那么 -lpthread
需要出现在库列表中的后面(如有必要,可以多次列出库):
g++ -o build/test1 build/test1.o -lgtest -lgtest_main -lpthread
虽然这不是使用 g++
构建 pthreads 代码的合适方法(如您的其他答案中所述),但它通常确实有效。
And why -gtest doest not working but -pthread without "l" is working...
-pthread
是 GCC 编译器套件识别的 specific 编译选项。 -lgtest
是 general -l
选项与 gtest
作为选项参数的组合。也可以编写类似的 -lpthread
选项,原则上,它与 -pthread
.