我在执行二进制方面遇到麻烦。该程序正在接收细分故障。过滤是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
我发现许多符号未定义。实际上,通过链接许多其他.So来获得此二进制。我在.so
之一上做了NMnm libmylib.so
00000000000de6f T Allocate memory
该程序与上述libmylib链接。链接过程中我没有任何错误。
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
有什么问题?有人可以建议我如何来吗?预先感谢
g -m32 -shared -wl -o a.out -lmylib
这将构建A 共享库,名为a.out
。不要这样做:共享库无法直接可执行。
您需要这样做:
g++ -m32 main.cc -o a.out -lmylib
其中main.cc
包含实际的main
函数。