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