链接器选项,用于在创建共享对象时静态链接lib * .a文件

时间:2010-06-18 12:37:05

标签: c++ makefile linker

如何使用gcc / make构建共享对象sharedobj.so时,告诉链接器静态链接libfoo.a。

我试图传递LDFLAG选项 LDFLAGS + = -W1 --whole-archive -L / path / to / libfoo -lfoo

我也试过传递LDFLAGS的选项 LDFLAGS + = -W1,static -L / path / to / libfoo -lfoo

我也试过传递LDFLAGS的选项 LDFLAGS + = -W1,Bstatic -L / path / to / libfoo -lfoo

我也试过传递LDFLAGS的选项 LDFLAGS + = -W1,statically_linked -L / path / to / libfoo -lfoo

我已阅读了许多链接,告诉我该怎么做,但到目前为止还没有。

3 个答案:

答案 0 :(得分:1)

LDFLAGS只是auto(conf | crap)的一个特性,而链接器从不关注它。只需在命令行中提供所有选项,例如:

gcc obj1.o obj2.o ... -shared -o libfoo.so -L / path / to / lib -lbar

答案 1 :(得分:0)

我真的不明白,您是否希望静态库成为共享库的一部分?

然后当它作为依赖项添加时它应该工作 - 就像其他对象(.o)文件一样。

将a.o b.o c.o staticlib.a链接到libsharedobj.so

答案 2 :(得分:0)

您可能会将库视为对象(.o)文件的存档(.a)。您可以在链接器步骤中以与目标文件类似的方式使用它。

然而,我不清楚是否所有存档都将包含在共享对象库(或exe)中或仅包含所需的部分 - 我的理解只是需要但我还没有玩过* nix 。对于.so而言,这可能意味着它不会包含和导出.so本身未使用的任何内容。