运行时按路径加载共享库

2023-12-29

我正在构建一个 Java 应用程序,该应用程序使用用 C++ 编写并针对不同操作系统进行编译的共享库。问题是,这个共享库本身依赖于它通常在适当的环境变量下找到的附加库(PATH, LIBRARY_PATH or LD_LIBRARY_PATH).

我可以 - 但不想 - 设置这些环境变量。我宁愿在运行时从给定路径加载所需的共享库 - 就像插件一样。不 - 我不希望任何启动应用程序在新环境中启动新进程。有人知道如何实现这一目标吗?

我知道这一定是可能的,因为我使用的库之一能够从给定路径加载其插件。当然,我更喜欢独立于平台的代码,但如果这不可能,针对 Windows、Linux 和 MacOS 的单独解决方案也可以做到。

EDIT我应该提到我希望使用的共享库是面向对象的,这意味着单个函数的绑定无法做到这一点。


在 UNIX/Linux 系统上您可以使用dlopen。那么问题是你必须通过以下方式获取你需要的所有符号dlsym

简单的例子:

typedef int (*some_func)(char *param);

void *myso = dlopen("/path/to/my.so", RTLD_NOW);
some_func *func = dlsym(myso, "function_name_to_fetch");
func("foo");
dlclose(myso);

将加载 .so 并从那里执行 function_name_to_fetch() 。有关更多信息,请参阅手册页 dlopen(1)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行时按路径加载共享库 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 在 PowerShell 中选择数组的所有对象的一个​​属性的值

    假设我们有一个对象数组 objects 假设这些对象有一个 Name 属性 这就是我想做的 results objects results Name 这可行 但是可以用更好的方式来完成吗 如果我做类似的事情 results objects
  • 无法绑定Margin属性?

    我正在尝试制作一种动画电影片段 其中在给定时刻只有一个字段可见 就像相机中的胶片一样 当前只有一个胶片场放置在镜头下方并准备被照亮 我尝试将其实现为一个带有另一个网格的网格 Film strip 在下面的代码中称为 pageContaine
  • 为什么x86很丑?为什么与其他人相比,它被认为是劣等的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我的 redis 密钥不会过期

    当生存时间达到 0 时 我的 Redis 服务器不会删除键 这是示例代码 redis cli gt SET mykey ismykey gt EXPIRE mykey 20 check TTL gt TTL mykey gt integer
  • 配置两节点 hazelcast 集群 - 避免多播

    上下文 Hazelcast 集群的两个节点 每个节点都位于一个离散的子网上 因此多播不适合也不适合节点定位 我想使用最少的 XML 配置文件 比如说hazelcast xml 将 Hazelcast 配置为使用 TCP IP 连接两个节点
  • 如何根据闪亮的输入选择对数据框进行子集化并用传单进行绘图

    我正在尝试使用 Rstudio 制作一个闪亮的应用程序来生成传单输出 请注意 shiny 是我以前从未使用过的包 因此脚本中可能存在除我当前遇到的错误之外的其他错误 我正在使用一个包含不同个体轨迹的数据帧 我想从中子集并绘制一只动物的轨迹以
  • 32位校验和算法比CRC32质量更好?

    是否有具有以下任一功能的 32 位校验和算法 输入数据大小 碰撞的分布更加均匀 这些与 CRC32 相关 由于 32 位存储空间的限制 我实际上不依赖第一个属性 但第二次 似乎就在那里could予以改进 有任何想法吗 谢谢 我需要具体的实现
  • 使用struts2使用动态参数进行重定向不起作用

    我在尝试使用动态参数重定向映射时遇到问题 我在 Struts2 中映射的方式
  • Facebook:应用程序配置不允许给定 URL

    从本周末开始 我们的一些较旧的 Facebook 游戏将无法加载 我认为这是由于游戏未获得访问令牌而导致的问题 因此无法代表用户 即 me 等 进行调用 我在 Javascript 控制台中看到以下内容 应用程序配置不允许给定 URL 应用
  • 'Zend_Db_Statement_Exception' 并显示消息 '无效的绑定变量名称 ':1'

    再会 背景信息 客户的托管服务器正在从 PHP 5 2 升级到 PHP 5 3 在 PHP 5 3 上测试时 客户端的应用程序崩溃了 具体来说 插入和更新方法是破坏应用程序的方法 该应用程序在 Zend Framework v1 7 2 中
  • WebAuthenticationBroker.AuthenticateAsync 引发异常

    我的代码使用 WebAuthenticationResult WebAuthenticationResult await WebAuthenticationBroker AuthenticateAsync WebAuthentication
  • 具有任意顺序的 JavaScript 依赖解决方案包括

    问题是这样的 我包含一个脚本 它使用另一个脚本 但是如果该依赖项还需要准备另一个脚本怎么办 这意味着加载它是不够的 但我还需要确保在执行之前调用了它的初始化回调 如果允许依赖项需要更多依赖项并在加载后显示它们 则 DOM 中脚本标签的顺序可
  • 小数和百分比行高有什么区别

    这个问题最初引用了w3c学校 我已经更正了该引用 根据w3c http www w3 org TR CSS21 visudet html propdef line heightCSSline height值可以设置如下
  • SQL Azure - 如何从 SQL Azure 中的主数据库中选择 sysdatabases 表?

    在 SQL Azure 中 我尝试这样做 从 master dbo sys 数据库中选择 并得到这个错误 此版本的 SQL Server 不支持引用 master dbo sysdatabases 中的数据库和 或服务器名称 我应该怎么做才
  • “最终一致性”与“强最终一致性”与“强一致性”?

    我遇到了 强最终一致性 的概念 它是否应该比 最终一致性 强但比 强一致性 弱 有人可以用适用的例子解释这三个概念之间的区别吗 http en wikipedia org wiki Eventual consistency Strong E
  • 如何禁止 easy_install 压缩 Egg?

    我必须投入什么distutils cfg防止easy install安装压缩的egg 压缩是一个很好的想法 但我喜欢能够 grep 并调试该代码 我引入了一些依赖项python setup py develop 仔细观察发现它也接受 alw
  • C# 自定义代码片段函数

    我有一个像这样的代码片段结构 private type lowercaseName public type uppercaseName get return lowercaseName set lowercaseName value 它会生
  • 使用自定义双括号格式进行 Python 模板安全替换

    我正在尝试替换格式中的变量 var 与Python的模板 from string import Template class CustomTemplate Template delimiter pattern r P
  • Qt 如何制作和安装插件?

    我想使用这里提到的 Qt Quick Components for Desktop http labs qt nokia com 2011 03 10 qml components for desktop http labs qt noki
  • 运行时按路径加载共享库

    我正在构建一个 Java 应用程序 该应用程序使用用 C 编写并针对不同操作系统进行编译的共享库 问题是 这个共享库本身依赖于它通常在适当的环境变量下找到的附加库 PATH LIBRARY PATH or LD LIBRARY PATH 我