在Windows中,当要链接到C++时,必须提供导入库。但是在GNU系统中,当您想要链接到.so文件(相当于dll )时,您不需要。为什么呢?是否存在与Windows导入库相当的内容。
注意:我没有谈到在Windows中使用GNU C++的情况,在这种情况下,您还必须使用导入库。分裂线在Windows C++和Linux C++之间。
发布于 2018-12-09 10:31:00
在和Linux中,链接模型是不同的。阅读Levine的书http://iecc.com/linkers/ (on,每个公共符号 of a 图书馆 )。
C++11标准(读取n3337)没有提到动态链接。这是一个实现细节。
未来的C++20可能会有模块。
Linux.中没有“导入库”。
要了解更多细节,请注意名称残缺是不同的。也请阅读https://tldp.org/HOWTO/Program-Library-HOWTO/,Drepper的https://www.akkadia.org/drepper/dsohowto.pdf
在Linux上,插件由动态装载机加载(并且处理方式与动态装载机不同)。见linux(8),dlopen(3),dlsym(3),精灵(5)
在Linux上检查小精灵文件(目标文件、库和objdump(1)以及可读性(1)和nm(1) )。
另见C++ dlopen迷你指南。还可以阅读有关可见性函数属性的内容。另见这问题。
相当于dll的.so文件。
Linux 共享对象 (小精灵 .so文件)并不完全等同于DLL。阅读上面给出的参考资料。
我还建议您阅读http://pages.cs.wisc.edu/%7Eremzi/OSTEP/和旧http://www.makelinux.net/alp/ (两者都可以免费下载)。稍后阅读系统(2)和从中引用的页面。
还请注意,Linux是自由软件,因此您可以下载并研究其大多数组件的源代码。
PS。Linux和Windows是非常不同的。不要期望在Linux中找到与每个Windows功能完全相同的内容。用全新的眼光看待Linux。利用Linux是由自由软件构成的,并考虑研究源代码,例如内核、https://sourceware.org/binutils/、GNU libc或musl-libc (都提供了一些ld-linux.so和libc.so,所以是C标准库)、< code >C49或嘎吱声 (它们都提供了c51上面的libc.so)。
https://stackoverflow.com/questions/53691295
复制相似问题