尝试在solaris i86中创建共享对象时出现奇怪的问题

时间:2011-06-09 02:00:57

标签: linux solaris

我正在尝试在solaris中创建一个共享对象.so文件,这些是我正在做的以下步骤...

  1. 我有一个源代码jags ...如果我们尝试构建它将生成一个可执行文件..下面是创建该命令的命令
  2. g++ -g -O2 -o .libs/jags-terminal jags_terminal-parser.o jags_terminal-scanner.o jags_terminal-ReadData.o .libs/jags-terminalS.o  /JAGS-2.2.0/libltdl/./.libs/dlopen.a ../../libltdl/.libs/libltdlc.a ../../src/lib/.libs/libjags.so -L/usr/sfw/lib /usr/sfw/lib/libstdc++.so -lgcc_s -lm -Wl,-R -Wl,/usr/local/lib -Wl,-R -Wl,/usr/sfw/lib
    
    1. 现在我正在尝试使用相同的流程创建一个共享对象,这个命令有点像这样
    2. g++ -shared -o .libs/libjagsterminal.so jags_terminal-parser.o jags_terminal-scanner.o jags_terminal-ReadData.o .libs/jags-terminalS.o  /JAGS-2.2.0/libltdl/./.libs/dlopen.a ../../libltdl/.libs/libltdlc.a ../../src/lib/.libs/libjags.so -L/usr/sfw/lib /usr/sfw/lib/libstdc++.so -lgcc_s -lm -Wl,-R -Wl,/usr/local/lib -Wl,-R -Wl,/usr/sfw/lib
      

      以下是执行上述行后的问题..

      std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)0x3ea      jags_terminal-ReadData.o
      _Unwind_Resume                      0x4f9       jags_terminal-parser.o
      _Unwind_Resume                      0x61f       jags_terminal-parser.o
      _Unwind_Resume                      0xae7       jags_terminal-parser.o
      _Unwind_Resume                      0xc0d       jags_terminal-parser.o
      _Unwind_Resume                      0xe5f       jags_terminal-parser.o
      _Unwind_Resume                      0xf7f       jags_terminal-parser.o
      _Unwind_Resume                      0x10cf      jags_terminal-parser.o
      _Unwind_Resume                      0x1371      jags_terminal-parser.o
      _Unwind_Resume                      0x1a9b      jags_terminal-parser.o
      _Unwind_Resume                      0x24f0      jags_terminal-parser.o
      _Unwind_Resume                      0x2a95      jags_terminal-parser.o
      _Unwind_Resume                      0x341a      jags_terminal-parser.o
      _Unwind_Resume                      0x377a      jags_terminal-parser.o
      _Unwind_Resume                      0x579c      jags_terminal-parser.o
      _Unwind_Resume                      0x7021      jags_terminal-parser.o
      _Unwind_Resume                      0x7417      jags_terminal-parser.o
      _Unwind_Resume                      0x1169      jags_terminal-scanner.o
      _Unwind_Resume                      0x17e0      jags_terminal-scanner.o
      _Unwind_Resume                      0x685       jags_terminal-ReadData.o
      _Unwind_Resume                      0x68e       jags_terminal-ReadData.o
      _Unwind_Resume                      0x47        jags_terminal-parser.o
      _Unwind_Resume                      0x79        jags_terminal-parser.o
      _Unwind_Resume                      0x60        jags_terminal-parser.o
      _Unwind_Resume                      0xd3        jags_terminal-parser.o
      _Unwind_Resume                      0x33a       jags_terminal-parser.o
      _Unwind_Resume                      0x3bc       jags_terminal-parser.o
      _Unwind_Resume                      0x1dd       jags_terminal-parser.o
      _Unwind_Resume                      0x299       jags_terminal-parser.o
      _Unwind_Resume                      0x179       jags_terminal-parser.o
      _Unwind_Resume                      0x87        jags_terminal-parser.o
      _Unwind_Resume                      0x145       jags_terminal-parser.o
      _Unwind_Resume                      0xb4        jags_terminal-ReadData.o
      ld: fatal: relocations remain against allocatable but non-writable sections
      collect2: ld returned 1 exit status
      

2 个答案:

答案 0 :(得分:1)

如果gcc使用/usr/ccs/bin/ld,则将-shared替换为-G

答案 1 :(得分:0)

共享对象需要构建position-independent,因此您希望将-fPIC标志添加到GCC调用中。