链接可执行文件与可加载模块有多可移植?

11 浏览
0 Comments

链接可执行文件与可加载模块有多可移植?

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

由于之前遇到了不完整且无法使用的模块问题,我编写了几个简单的检查程序,它们只包含一个main()函数,并与这些模块进行链接。当一个函数缺失时,链接器会显示相应的警告信息,所以一切都很好。然而,libtool给我一个警告:

*** 警告:将可执行文件checkplugin_locprec与可加载模块liblocprec.so进行链接是不可移植的!

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

这个警告有多严重?我只是幸运地在我编译的平台(i386/x86_64 Linux和MinGW)上运行正常,还是这个警告只针对一些我可以安全忽略的陌生平台?

0
0 Comments

问题的原因是:在Mac OS X上无法将可执行文件链接到可加载模块。在其他平台上,它通常可以工作,但可能会因为使用的其他构建选项而失败。如果使用了libtool,那么在其他平台上可能是安全的。

解决方法是:在Mac OS X上,可以考虑使用其他方法来链接可执行文件和可加载模块。在其他平台上,可以尝试使用libtool来确保链接的可移植性。

0