Stack:MIPS,Linux,C,C ++使用GNU工具进行编译和链接(在x86上构建MIPS)
公平警告:我是C,C ++新手,随时可以提出任何可能显而易见的内容,因为我可能尚未尝试过。
我能够构建一个动态链接到库(live555)的可执行文件,如果我静态链接到这一切一切正常,但是当我尝试在运行时动态链接可执行文件崩溃时。为了确认我正在构建.so文件,我还尝试构建其他可执行文件(live555附带的测试工具)来动态链接这些.so库并且这些工具工作正常。
链接/构建似乎工作正常,在构建期间不会抛出任何错误或警告。我可以用readelf -d检查崩溃的可执行文件,并清楚地看到.so引用。我也可以在可执行文件的MIPS系统上运行ldd,并且库似乎可以正常加载,strace输出也显示这些库被加载。不幸的是,strace输出并没有真正为我提供任何内容,我已经与熟悉这个系统的其他人交谈,他们不确定问题是什么。
只是寻找尝试的想法和工具,如果有人有任何想法我会适合他们!
感谢您阅读
答案 0 :(得分:1)
此处没有足够的信息可以深入开展故障排除。一些开始调试的想法,从最少到最耗时:
ldd
后,检查加载库的路径,确保库是您编译/链接的版本。简单的方法是在目标和主机上获取MD5
哈希值,确保它们是相同的。
$> ulimit -c unlimited
,运行gdb或DDD,加载故障转储并检查您的环境。make -n
来查看二进制文件的生成方式。LDPATH
env并确保其合理;空虚是完美无缺的。LDFLAGS
。您可能必须运行make -n
,查找gcc
命令或collect
命令,然后复制粘贴整行并将--verbose
添加到最后,这样您就可以确切地看到链接器正在做。您可能必须修复源/目标文件的路径,具体取决于构建系统的设置方式。我们的想法是尝试消除潜在的问题,例如:
你很幸运,你已经安装了Linux,所以应该相当容易,只是可能很耗时。