使用gcc,如何将库(-lpthread)包含到我自己的静态用户库中?

时间:2017-10-29 23:54:40

标签: c gcc static-libraries

我想在我的静态用户库中使用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方法比'-ppread'更长。注意我的用户库中的#pragma或等效机制只输入一次,但需要'-lpthread'可能数百次,如果用户库中的基础机制发生变化,则需要多次更改。)

1 个答案:

答案 0 :(得分:0)

静态库在目标文件的哑存档之上真的很小。特别是它们不跟踪对其他库的依赖性。

  

在gcc中是否有类似的东西,或者其他一些方法可以避免在每个依赖项目中指定'-lpthread'?   ...   '-lpthread'可能需要数百次,如果用户库中的底层机制发生变化,则需要更改次数

在Unix世界中,这通常在构建系统级别完成(例如,如果您处理Autoconf,则通过适当地设置LIBS环境变量)。

  

请注意,我的用户库中的#pragma或等效机制只需键入一次

pragma的语义虽然没有明确规定。首先,如果不同的源文件中有两个编译指示,应该首先链接哪个库?