将混乱与libc链接

Asked
Viewd530

0

我将一个库编译成一个.a文件,并与我的应用程序链接。(iPhone,使用Xcode开发)

一切似乎都很好,链接似乎成功了,但是当我运行程序时,它崩溃了。崩溃的关键点在于静态链接库中的memcmp()调用。调试器会在名称中显示所有用“ dyld”调用的内容,因此似乎由于某种原因它无法解析memcmp,开始寻找动态库,然后失败。

AFAIK memcmp在libc中,因此应该没有问题。(也尝试将-lc传递给链接器,但正如我所料,它没有帮助)

那么它应该如何工作?为什么静态链接库不能使用libc中的任何内容?我应该如何编译?

谢谢

  • 您所链接的库是您自己编写的应用程序吗?-我不禁怀疑它使用的是未初始化或空指针。还是您使用的库不正确导致指针无效?回溯说什么?

    James MorrisNovember 14, 2009 00:17
  • 否,它是一个广泛使用的库,可以在许多平台上可靠地工作,并且它在一开始就带有初始化程序功能而失败。相同的代码段(实际上是2个函数调用来进行设置),回溯指向memcmp函数。(该库是在调试模式下编译的)

    November 17, 2009 15:48

2 个答案

0

如果我分享问题所在,也许有人会发现它有用:

该库未针对与主程序相同的OS版本进行编译,因此它期望的libc与运行时发现的libc不同。

0

libc显然是在您的平台上动态链接的。在运行时找不到匹配的版本来满足链接时生成的依赖性。

除了文件系统损坏或在动态链接发生之前调用chroot(这似乎不太可能)之外,我无法解释这种情况如何发生。

  • 某些编译器将memcmp()作为内部函数来处理。也就是说,如果您调用它,它将放置代码以实现它,而不是调用库函数。

    Southern HospitalityNovember 19, 2009 07:46
  • 奇怪的是,我可以从主程序调用memcmp(),但是库仍然无法使用它。

    November 17, 2009 15:49