【发布时间】:2017-10-29 23:54:39
【问题描述】:
我想在我的静态用户库中使用 pthread 的东西,但是除非我将“-lpthread”添加到每个使用它的项目中,否则相关项目不会链接。
我宁愿在我自己的用户库中指定“-lpthread”。实际上,我已经这样做了,但它什么也没做;我仍然需要将'-lpthread'添加到依赖项目,否则我会得到
Invoking: GCC C++ Linker
g++ <....>
/usr/bin/ld: /home/xxx/git/xxx/xxx.CUtil/Debug/libxxx.CUtil.a(EzyThread.o): undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
IMO 如果我还必须在使用它的项目中包含它的依赖项,它就违背了我自己的用户库的目的;如果我决定使用其他内部机制而不是 pthread 怎么办?
我用过
#pragma comment(lib, "SomeOtherStuff.lib")
在 MS VC 中执行我想要的操作 - 但我现在处于 gcc 环境中。我查看了#pragma comment(lib, "xxx.lib") equivalent under Linux?,它似乎情绪高涨,可用信息低。 gcc 中是否有类似的东西,或者有其他方法可以避免在每个依赖项目中指定“-lpthread”?我知道 C 不是 OOP 但为什么要让每个依赖项都必须弄清楚用户库是如何实现的?
(请不要说#pragma方法之类的东西比'-lpthread'长。注意#pragma或我的用户库中的等效机制只输入一次,但需要'-lpthread'可能数百次,并且如果用户库中的底层机制发生变化,则需要多次更改。)
【问题讨论】:
-
AFAIK 你不能。
-
这种事情一般委托给构建系统。
-
会提取
.o并将它们添加到您的库帮助中吗?见ar t /usr/lib/x86_64-linux-gnu/libpthread.a、man ar
标签: c gcc static-libraries