【发布时间】:2013-12-20 16:28:02
【问题描述】:
堆栈:MIPS、Linux、C、C++ 使用 GNU 工具编译和链接(基于 x86 构建 MIPS)
公平警告:我是 C、C++ 新手,请随意提出任何可能显而易见的建议,因为我可能还没有尝试过。
我能够构建一个动态链接到库 (live555) 的可执行文件,如果我静态链接到它一切正常,但是当我尝试在运行时动态链接可执行文件时崩溃。为了确认我正在正确构建 .so 文件,我还尝试构建其他可执行文件(live555 附带的测试工具)以动态链接这些 .so 库,并且这些工具工作正常。
链接/构建似乎工作正常,构建过程中没有抛出错误或警告。我可以使用 readelf -d 检查崩溃的可执行文件并清楚地看到 .so 引用。我还可以在 MIPS 系统上的可执行文件上运行 ldd,并且库似乎加载正常,strace 输出也显示这些库正在加载。不幸的是,strace 输出并没有真正为我提供任何现场,我已经与熟悉该系统的其他人交谈,他们不确定问题是什么。
只是寻找想法和工具来尝试,如果有人有任何想法,我会适当的!
感谢阅读
【问题讨论】:
-
你的
live555库(里面的所有对象)是用-fPIC 编译的吗?这可能是一个可重定位的代码问题。 -
您是否使用符号 (
-g) 编译并使用gdb运行程序?这样做你应该得到一个很好的回溯,指向崩溃发生的地方。 -
还可以链接同一库的 2 个版本 - 静态和动态。
-
启用故障转储生成
$> ulimit -c unlimited;使用调试符号-g重新编译您的程序,然后运行 gdb 或 DDD,加载故障转储并检查您的环境。