如何静态链接库与gcc?

时间:2016-03-24 03:40:28

标签: gcc static-linking

我是C ++编译/链接新手。

我试图将所有库静态链接到gcc,我尝试使用LDFLAGS = -static但是没有用。错误消息显示:

  

/ bin / sh ./libtool --tag = CXX --mode = link / home / dizhang / lib / hdf5 / bin / h5c ++ -g -O2 -L / home / dizhang / lib / blitz / lib -L / home / dizhang / lib / libconfig / lib -o angora src / libangora.la -lblitz -lconfig ++   libtool:link:/ home / dizhang / lib / hdf5 / bin / h5c ++ -g -O2 -o angora -L / home / dizhang / lib / blitz / lib -L ​​/ home / dizhang / lib / libconfig / lib src /。 libs / libangora.a -L / bgsys / drivers / V1R2M2 / ppc64 / comm / lib64 -L / bgsys / drivers / V1R2M2 / ppc64 / comm / lib -L ​​/ bgsys / drivers / V1R2M2 / ppc64 / spi / lib -lpthread - lm /home/dizhang/lib/blitz/lib/libblitz.a /bgsys/drivers/V1R2M2/ppc64/comm/lib/libmpichcxx-gcc.so / bgsys / drivers / toolchain / V1R2M2_base / gnu-linux / powerpc64-bgq- linux / lib / libstdc ++。so /bgsys/drivers/V1R2M2/ppc64/comm/lib/libmpich-gcc.so /bgsys/drivers/V1R2M2/ppc64/comm/lib/libopa-gcc.so / bgsys / drivers / V1R2M2 / ppc64 / comm / lib / libmpl-gcc.so /home/dizhang/lib/libconfig/lib/libconfig++/a / bgsys / drivers / toolchain / V1R2M2_base-efix014 / gnu-linux / powerpc64-bgq-linux / lib / libstdc ++。 so -Wl,-rpath -Wl,/ bgsys / drivers / toolchain / V1R2M2_base-efix014 / gnu-linux / powerpc64-bgq-linux / lib -Wl,-rpath -Wl,/ bgsys / drivers / V1R2M2 / ppc64 / comm / lib -Wl,-rpath -Wl,/ bgsys / drivers / toolchain / V1R2M2_base / gnu-linux / powerpc64-bgq-linux / lib -Wl,-rpath - Wl,/ bgsys / drivers / toolchain / V1R2M2_base-efix014 / gnu-linux / powerpc64-bgq-linux / lib -Wl,-rpath -Wl,/ bgsys / drivers / V1R2M2 / ppc64 / comm / lib -Wl,-rpath - WL,/ bgsys /驱动器/工具链/ V1R2M2_base / GNU Linux的/ powerpc64-BGQ Linux的/ lib目录   /bgsys/drivers/toolchain/V1R2M2_base-efix014/gnu-linux/lib/gcc/powerpc64-bgq-linux/4.4.7/../../../../powerpc64-bgq-linux/bin/ld :尝试动态对象的静态链接`/bgsys/drivers/V1R2M2/ppc64/comm/lib/libmpichcxx-gcc.so'   collect2:ld返回1退出状态

我做了一些搜索并发现,告诉Makefile -Wl -Bstatic可能会解决这个问题,但我应该如何在Makefile中更改它?

我尝试在Makefile中搜索-Wl,但它不在文本中。

谢谢,

1 个答案:

答案 0 :(得分:0)

看起来你正在尝试在BGQ上构建支持MPI的HDF5。

只要你最终将一个lib的“.so”版本传递给BGQ上的gcc,你就会看到这个错误。您可能需要检查如何将MPI信息传递给HDF5的配置脚本。

在我的情况下(构建另一个使用CMake的项目)将BGQ的MPI编译器包装器传递给CMake总是会产生一个问题,它会尝试使用共享库而不是静态库链接MPI。要解决这个问题,我必须确保明确指定MPI库的“.a”变体。