由于链接问题,程序无法运行
Posted
技术标签:
【中文标题】由于链接问题,程序无法运行【英文标题】:program not running due to problems in linking 【发布时间】:2012-12-29 10:51:55 【问题描述】:我在执行二进制文件时遇到了麻烦。程序收到分段错误。 过滤是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】:g++ -m32 -shared -Wl -o a.out -lmylib
这将构建一个名为a.out
的共享库。不要那样做:共享库不能直接执行。
你会想要这样做:
g++ -m32 main.cc -o a.out -lmylib
其中main.cc
包含实际的main
函数。
【讨论】:
我实际上收到以下错误 /usr/bin/ld:以上是关于由于链接问题,程序无法运行的主要内容,如果未能解决你的问题,请参考以下文章
由于 ImportError,Python 无法运行:无法导入 MAXREPEAT