【发布时间】:2009-04-16 13:40:57
【问题描述】:
我使用 Windows 主机上的 RVDS 编译器使用 *.o 目标代码文件(C 源代码)创建了一个共享库 (*.so)。
我将这个共享对象与一个应用程序(在 Linux 主机上使用gcc 用于 ARM 目标)链接并获得一个可执行文件,该可执行文件在运行时会产生分段错误。 (我知道我必须调试它!)
如果我不是创建共享库,而是创建一个具有相同源文件的静态库,然后与应用程序链接,然后执行应用程序,它会按预期工作。
所以我的问题是:
我是否需要在我的源文件中使用某些结构明确地导出符号(导出到应用程序的函数)或任何其他符号,以便在与应用程序链接时能够正常工作?需要什么?我该怎么做?
共享库是如何工作的?即,函数将被加载和运行的地址,将在创建库时在库中给出。应用程序(
main())如何解析要执行库函数的地址?静态库是如何工作的,即在静态库的情况下,这个地址规范和解析是如何发生的?
【问题讨论】:
标签: linux shared-libraries arm cross-compiling rvds