由于链接问题,程序未运行

时间:2012-12-29 10:51:55

标签: segmentation-fault undefined-symbol nm

我在执行二进制文件时遇到了麻烦。该程序正在接收分段错误。 过滤是gdb的输出

gdb a.out

(gdb) run
Starting program: a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000001 in ?? ()
(gdb)

然后我使用了nm实用程序

nm -u a.out
      U Allocatememory

我发现许多符号未定义。这个a.out二进制文件实际上是通过链接许多其他.so来获得的。 我在其中一个.so

上做了nm
nm libmylib.so
00000000000de6f  T Allocate memory

该程序与上面的libmylib.so相关联。在链接过程中我没有遇到任何错误。

g++ -m32  -shared -Wl -o a.out -lmylib 

但是,没有-shared选项,我收到以下错误

/usr/bin/ld: <path_to_bin>/a.out: hidden symbol `__dso_handle' in 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/32/crtbegin.o is referenced by DSO
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status
*** Error code 1

可能是什么问题?有人可以建议我怎么过来这个? 提前谢谢

1 个答案:

答案 0 :(得分:1)

  

g ++ -m32 -shared -Wl -o a.out -lmylib

这将构建一个名为a.out共享库。不要这样做:共享库不能直接执行。

你会想要这样做:

g++ -m32 main.cc -o a.out -lmylib

其中main.cc包含实际的main函数。