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