Windows和Linux中的链接模型不同。阅读Levine的书《链接器和加载器》(在Linux上,库的每个公共符号都将导出,除非您玩了一些可视性技巧;在Windows上则不是,并且需要明确显示导出的符号)。
在C ++ 11标准(读n3337)没有提到动态链接。这是一个实现细节。
有关更多详细信息,请注意名称修饰是不同的。另请参阅程序库Howto,Drepper的如何编写共享库
在Linux上,插件由动态加载程序加载(与Windows上的处理方式不同)。参见ld-linux(8),dlopen(3),dlsym(3),elf(5)
在Linux上检查是否 具有objdump(1)以及readelf(1)和nm(1)的ELF文件(目标文件,库,可执行文件)。
另请参见C ++ dlopen mini howto。另请参阅“ 可见性”功能属性。另请参阅此问题。
.so文件相当于dll
Linux 共享库(ELF .so文件)与Windows DLL 不完全等效。阅读上面给出的参考。
我还建议您阅读《操作系统:三篇简单的文章》和旧的《高级Linux编程》(均可免费下载)。稍后阅读syscalls(2)和从那里引用的页面。
另请注意,Linux是免费软件,因此您可以下载和研究其大多数组件的源代码。
PS。Linux和Windows确实不同。不要期望在Linux中找到与每个Windows功能完全相同的功能。睁大眼睛看看Linux。充分利用Linux是由自由软件,并考虑研究源代码,如中核,binutils的,GNU libc中或MUSL-libc的(包括提供一些ld-linux.so和libc.so,因此C标准库),GCC或锵(均提供C ++上方的标准库libc.so)。
为了补充 Basile 的答案,您可能偶尔需要在 Linux 上导入库来模拟共享库的延迟加载(例如,如果您的应用程序很少需要此库并且您不想在其上浪费资源,这很有用)。
这种模拟导入库将由一堆包装器组成,这些包装器在内部调用dlopen和dlsym,然后转到共享库中的实现。它们可以通过项目特定的脚本或通用工具Implib.so手动实现。
| 归档时间: |
|
| 查看次数: |
886 次 |
| 最近记录: |