发现这个声明在PSE上:(引用Bob)
“我在Windows和Mac OS上最喜欢的技巧之一在Linux上不起作用。这个技巧是使用C++内部编写DLL / dylib,导出C API,然后能够从C程序调用它。 Linux共享对象(DLL的本地等效项)不能很容易地做到这一点,因为C ++标准库.so不在默认搜索路径中。如果您不对C程序进行一些奇怪的处理,它将在运行时动态加载您的.so时立即失败:您的.so将尝试动态加载标准库.so,它找不到它,然后您的程序将退出。”
我觉得这有点奇怪。考虑到Linux主要桌面/服务器发行版之间可能存在的差异,这有多准确?
至于Windows,我必须查一下,我会把它放在这里供参考: C++可执行文件通常会链接到MSVCR*.DLL C标准库和MSVCP*.DLL STL的内容,这些内容驻留在此DLL中。这两个都驻留在system32目录中,或者对于清单化的东西,它们将驻留在Windows SideBySide缓存的子目录中( winsxs文件夹)。
“我在Windows和Mac OS上最喜欢的技巧之一在Linux上不起作用。这个技巧是使用C++内部编写DLL / dylib,导出C API,然后能够从C程序调用它。 Linux共享对象(DLL的本地等效项)不能很容易地做到这一点,因为C ++标准库.so不在默认搜索路径中。如果您不对C程序进行一些奇怪的处理,它将在运行时动态加载您的.so时立即失败:您的.so将尝试动态加载标准库.so,它找不到它,然后您的程序将退出。”
我觉得这有点奇怪。考虑到Linux主要桌面/服务器发行版之间可能存在的差异,这有多准确?
至于Windows,我必须查一下,我会把它放在这里供参考: C++可执行文件通常会链接到MSVCR*.DLL C标准库和MSVCP*.DLL STL的内容,这些内容驻留在此DLL中。这两个都驻留在system32目录中,或者对于清单化的东西,它们将驻留在Windows SideBySide缓存的子目录中( winsxs文件夹)。