c - 将可执行文件链接到可加载模块的可移植性如何?

标签 c linker dynamic-linking libtool

我手头有一个项目,其中包含一些编译为可加载模块的库,即与 libtool 的 -module 标志链接。这些库应该在它们自身或其依赖项中包含所有必要的函数,也就是说,当它们与一个简单的 main() 函数链接时,它们应该产生一个完整的程序,该函数只调用模块接口(interface)的所有函数对于我的程序。

由于我之前遇到过不完整且因此无法使用的模块的问题,所以我有一些简单的检查程序,它们只包含一个 main() 并链接到模块。当缺少一个函数时,链接器会发出适当的警告,所以一切都很好。然而,libtool 给了我一个警告:

*** Warning: Linking the executable checkplugin_locprec against the loadable module
*** liblocprec.so is not portable!

我了解此警告的目的和意图(不要将程序链接到使用 -module 构建的库),但不了解其严重性,这就是我的问题:

这个警告有多严重?幸运的是这适用于我正在编译的平台(i386/x86_64 Linux 和 MinGW),还是这个警告只与我可以安全忽略的一些晦涩的落后平台相关?

最佳答案

这不起作用的主要平台是 Mac OS X。在其他平台上,它通常应该可以工作,但可能会失败,具体取决于您使用的其他构建选项。如果您使用了 libtool,那么您在其他平台上可能是安全的。

关于c - 将可执行文件链接到可加载模块的可移植性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619607/

相关文章:

c - 嵌入 Ruby 并编译

c++ - 编译为多个指令集时避免重复符号

c++ - 链接器错误 - 其他包含目录问题?

gcc - 为什么丢失的共享库会致命?

c - 在 C 中,哪个更快 : if with returns, 或者如果有返回?

C 指针 : difference between while(*s++) { ;} and while(*s) { s++;}

c++ - 什么是流行的、多平台的、免费的、开源的套接字库

c++ - 从 .cpp 文件调用 .mm 函数的链接器错误

c - 使用 RPATH 但不使用 RUNPATH?

c++ - 在 Debian/squeeze 上查找 libstdc++ 中丢失的符号