2011-10-12 137 views
1

使用gcc构建共享librrary之后,共享库生成良好,但是当我发出“ldd”时,它给了我对“libstdC++。so.5”的依赖关系没有办法告诉编译器GCC igonre所以文件相关gcc选项忽略libstdC++。so.5依赖项

# ldd libtest.so 
      libstdc++.so.5 =>  /opt/gcc/libstdc++.so.5 
      libsocket.so.1 =>  /lib/libsocket.so.1 
      libnsl.so.1 => /lib/libnsl.so.1 
      libc.so.1 =>  /lib/libc.so.1 
      libmp.so.2 => /lib/libmp.so.2 
      libmd.so.1 => /lib/libmd.so.1 
      libscf.so.1 => /lib/libscf.so.1 
      libdoor.so.1 => /lib/libdoor.so.1 
      libuutil.so.1 =>   /lib/libuutil.so.1 
      libgen.so.1 => /lib/libgen.so.1 
      libm.so.2 =>  /lib/libm.so.2 
      /platform/SUNW,SPARC-Enterprise-T5220/lib/libc_psr.so.1 
      /platform/SUNW,SPARC-Enterprise-T5220/lib/libmd_psr.so.1 

什么编译optiion我应该给这会忽略像“的libstdC++。so.5的”的依赖条件?

+0

它被标记为Linux,但它看起来像你在Solaris上,不是吗? –

回答

2

建筑librrary使用gcc共享后,共享库建立,但是当我发出“LDD”它给我依赖上“的libstdC++。so.5的”

GCC不自动链接libstdC++,g ++。所以,无论是用g ++链接还是通过-lstdc++链接器选项。

您有几种选择:

  • 构建和链接与gcc,不g++,以确保的libstdC++不会被自动链接。不要通过-lstdc++链接器选项。显然,这只适用于C的代码。
  • 通过使用-static-libstdc++链接阶段选项,建立并链接到g++并静态链接libstdC++。
+0

#g ++ -lstdC++ -o first3 first.cpp [root @ aninath -lnx sharedlibraray]#ldd first3 libstdC++。so.6 => /usr/lib64/libstdc++.so.6(0x0000003c64600000) libm.so.6 => /lib64/libm.so.6(0x0000003c5e200000) libgcc_s.so.1 => /lib64/libgcc_s.so.1(0x0000003c64200000) libc.so.6 => /lib64/libc.so.6(0x0000003c5de00000 ) /lib64/ld-linux-x86-64.so.2(0x0000003c5ce00000) – anish

+0

]#g ++ -static-libstdC++ -o first3 first.cpp g ++:无法识别的选项'-static-libstdC++' – anish

+0

老兄,你没有'像我说的那样。再次阅读。 –