我想在我的静态用户库中使用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'可能数百次,如果用户库中的基础机制发生变化,则需要多次更改。)
答案 0 :(得分:0)
静态库在目标文件的哑存档之上真的很小。特别是它们不跟踪对其他库的依赖性。
在gcc中是否有类似的东西,或者其他一些方法可以避免在每个依赖项目中指定'-lpthread'? ... '-lpthread'可能需要数百次,如果用户库中的底层机制发生变化,则需要更改次数
在Unix世界中,这通常在构建系统级别完成(例如,如果您处理Autoconf,则通过适当地设置LIBS
环境变量)。
请注意,我的用户库中的#pragma或等效机制只需键入一次
pragma的语义虽然没有明确规定。首先,如果不同的源文件中有两个编译指示,应该首先链接哪个库?