我知道使用ldconfig和LD_LIBRARY_PATH的一般基础知识,但我希望能得到一些大师的帮助来解决我的情况。我有一个可移植的软件包,它位于自己的目录中,许多库都有自己的版本。有很多二进制文件和脚本从这个目录运行。一些二进制文件(apache、php、postgres)也可能在系统上安装了单独的版本。由于php可能有两个版本,如果系统无法判断是哪个版本,创建/etc/ld.so.conf.d/myapp.conf是不够的“myapp”使用ldconfig文件。我正在寻找配置此类系统的最佳实践。最初设置软件包的人导出了LD_LIBRARY_PATH,以便系统上的所有应用程序都使用
我有一个程序通过从一些plugin_name.so中动态加载一个函数来实现一个插件系统(像往常一样)。但是反过来我有一个静态的“助手”库(我们称它为helper.a),它的功能在主程序和插件中的主函数中都被使用。它们不必以任何方式互操作,它们只是用于文本操作等的辅助函数。这个程序一旦启动,就不能重新加载或重新启动,这就是为什么我希望从插件而不是主程序中获得新的“助手”功能。所以我的问题是..是否可以强制.so中的这个“插件功能代码”使用(静态链接?)与主程序不同(也许更新)的“助手”版本?这怎么可能?也许通过静态链接或以其他方式将helper.a添加到plugin_name.so?
我有一个程序通过从一些plugin_name.so中动态加载一个函数来实现一个插件系统(像往常一样)。但是反过来我有一个静态的“助手”库(我们称它为helper.a),它的功能在主程序和插件中的主函数中都被使用。它们不必以任何方式互操作,它们只是用于文本操作等的辅助函数。这个程序一旦启动,就不能重新加载或重新启动,这就是为什么我希望从插件而不是主程序中获得新的“助手”功能。所以我的问题是..是否可以强制.so中的这个“插件功能代码”使用(静态链接?)与主程序不同(也许更新)的“助手”版本?这怎么可能?也许通过静态链接或以其他方式将helper.a添加到plugin_name.so?
我正在从main动态加载(使用dlopen())一个共享对象(名为libprofile1.so)。在libprofile1.so中,我定义了工厂函数CreateProfile和类Profile。CreateProfile函数创建一个Profile类的实例并返回指向它的指针。类Profile有一个方法pMethod。在main中,加载libprofile1.so后,我调用CreateProfile方法,该方法返回指向Profile类对象的指针(称它为p)。之后,我针对对象p(p->pMethod)调用pMethod方法。在此方法中,我动态加载其他共享对象(libdatasources.s
我正在从main动态加载(使用dlopen())一个共享对象(名为libprofile1.so)。在libprofile1.so中,我定义了工厂函数CreateProfile和类Profile。CreateProfile函数创建一个Profile类的实例并返回指向它的指针。类Profile有一个方法pMethod。在main中,加载libprofile1.so后,我调用CreateProfile方法,该方法返回指向Profile类对象的指针(称它为p)。之后,我针对对象p(p->pMethod)调用pMethod方法。在此方法中,我动态加载其他共享对象(libdatasources.s
我正在构建这里解释的基本Slick游戏示例:http://slick.cokeandcode.com/wiki/doku.php?id=01_-_a_basic_slick_game,我遇到了一些问题。具体来说,游戏编译得很好,但当我尝试运行它时,Java报错:Exceptioninthread"main"java.lang.UnsatisfiedLinkError:nolwjglinjava.library.pathatjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)atjava.lang.Runtime.loadLib
我正在构建这里解释的基本Slick游戏示例:http://slick.cokeandcode.com/wiki/doku.php?id=01_-_a_basic_slick_game,我遇到了一些问题。具体来说,游戏编译得很好,但当我尝试运行它时,Java报错:Exceptioninthread"main"java.lang.UnsatisfiedLinkError:nolwjglinjava.library.pathatjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)atjava.lang.Runtime.loadLib
我正在用C语言构建一个共享库,该库由我没有源代码访问权限的程序动态加载。目标平台是64位Linux平台,我们使用gcc来构建。我能够在大约100行内构建该问题的重现,但它仍然有点难以阅读。希望它是说明性的。核心问题是我在共享库中定义了两个非静态函数(bar和baz)。两者都需要是非静态的,因为我们希望调用者能够对它们进行dlsym。此外,baz调用bar。使用我的库的程序还有一个名为bar的函数,这通常不是问题,但调用程序是用-rdynamic编译的,因为它有需要在我的共享库中调用的函数foo。结果是我的共享库最终在运行时链接到调用程序的bar版本,产生了不直观的结果。在理想情况下,我
我正在用C语言构建一个共享库,该库由我没有源代码访问权限的程序动态加载。目标平台是64位Linux平台,我们使用gcc来构建。我能够在大约100行内构建该问题的重现,但它仍然有点难以阅读。希望它是说明性的。核心问题是我在共享库中定义了两个非静态函数(bar和baz)。两者都需要是非静态的,因为我们希望调用者能够对它们进行dlsym。此外,baz调用bar。使用我的库的程序还有一个名为bar的函数,这通常不是问题,但调用程序是用-rdynamic编译的,因为它有需要在我的共享库中调用的函数foo。结果是我的共享库最终在运行时链接到调用程序的bar版本,产生了不直观的结果。在理想情况下,我
*问题已修改(见下文)*我有一个定义静态全局变量的cpp文件,例如staticFoobar;这个cpp文件被编译成一个可执行文件和一个共享库。可执行文件可以在运行时加载共享库。如果我在Linux上,这个变量似乎有两个拷贝。我假设一个来自可执行文件,一个来自共享库。其他平台(HP、Windows)好像只有一份。在Linux上是什么控制着这种行为,我可以改变它吗?例如,是否有编译器或链接器标志强制共享库中此变量的版本与可执行文件中的版本相同?*修改问题*感谢您到目前为止的回答。在重新检查问题时,它实际上不是上述问题。上面的静态全局变量在Windows上确实有多个拷贝,所以与我在Linux上