strange problem while trying to create a shared object in solaris i86
I am trying to create a shared object .so file in solaris these are the below steps which i am doing...
- I have a source code jags... if we try to build that it will generate an executable file.. below is the command to create that
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/sf开发者_StackOverflow社区w/lib
- Now i am trying to create a shared object using same flow changed the command a little bit like this
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
below is the the problem after executiing above line..
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
If gcc
uses /usr/ccs/bin/ld
then replace -shared
with -G
Shared objects need to be build position-independent
, so you want to add the -fPIC
flag to GCC invocation.
精彩评论