gpt4 book ai didi

c++ - 相当于 Linux 中的导入库

转载 作者:可可西里 更新时间:2023-11-01 09:41:54 26 4
gpt4 key购买 nike

在 Windows C++ 中,当您想要链接到一个 DLL 时,您必须提供一个导入库。但是在 GNU 构建系统中,当你想要链接到 .so 文件时,这些文件相当于你不需要的 dll。为什么是这样?是否有等效的 Windows 导入库。

注意:我不是在谈论您在 Windows 中使用 GNU C++ 的情况,您也必须使用导入库。分割线在 Windows C++ 和 Linux C++ 之间。

最佳答案

Windows 和 Linux 中的链接模型不同。阅读莱文的书 Linkers and loaders (在 Linux 上,一个 symbol 的每个公共(public) library 都会被导出,除非你玩 visibility 把戏;在 Windows 上,情况并非如此,导出的符号需要显式显示)。

C++11标准(阅读 n3337 )不要提及动态链接。这是一个实现细节。

future C++20可以有 modules .

Linux 中没有“导入库”。

有关更多详细信息,请注意 name mangling是不同的。另请阅读 Program Library Howto , Drepper 的 How to Write Shared Libraries

在 Linux 上,pluginsdynamic loader 加载(并且处理方式与 Windows 不同) .参见 ld-linux(8) , dlopen(3) , dlsym(3) , elf(5)

检查,在 Linux 上,ELF文件 ( object files , libraries , executables ) 与 objdump(1)readelf(1)nm(1) .

另见 C++ dlopen mini howto .另请阅读 Visibility函数 attribute .另见 this问题。

.so files which are the equivalent of dll

Linux shared object (ELF .so 文件)不完全等同于 Windows DLL .阅读上面给出的引用资料。

我还推荐阅读 Operating Systems: Three Easy Pieces和旧Advanced Linux Programming (两者都可以免费下载)。稍后阅读syscalls(2)以及从那里引用的页面。

另请注意,Linux 是 free software , 因此您可以下载和研究其大部分组件的源代码。

附言。 Linux 和 Windows 确实不同。不要指望在 Linux 中找到与每个 Windows 功能完全相同的功能。 以全新的眼光看待 Linux。利用 Linux 是由自由软件构成的优势,并考虑研究源代码,例如的 kernel , binutils , GNU libcmusl-libc (两者都提供了一些 ld-linux.solibc.so,所以一个 C standard library ),GCCClang (两者都在 libc.so 之上提供了一个 C++ standard library)。

关于c++ - 相当于 Linux 中的导入库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com